<python>try except 구문

jm_yoon·2021년 1월 6일
2

코드를 치다가 궁금해서 정리해보는 try-except와 if-else의 차이!

try-except

파이썬에서 프로그래밍 하면서 다양한 에러가 발생할 수 있는데 에러가 발생하는 상황에서 이 예외를 처리할 수 있는 구문이 try-except구문이다.

try:
	예외가 발생할 가능성이 있는 코드

except:
	예외가 발생했을 때 실행할 코드
    (필요에 따라 except 절을 추가로 작성)

에러가 발생할 것 같은 코드를 try안에 넣고 except뒤에 발생할 수 있는 에러의 이름을 적어두면, 에러 발생시 프로그램이 멈추지 않고 별도 처리가 가능하다.

text = '100%'

try :
    number = int(text) # 에러가 발생할 가능성이 있는 코드
except ValueError :  # 에러 종류
    print('{}는 숫자가 아닙니다.'.format(text))  #에러가 발생 했을 경우 처리할 코드
# try-except 문
def safe_pop_print(list, index):
    try:
        print(list.pop(index))
    except IndexError:
        print('{} index의 값을 가져올 수 없습니다.'.format(index))

safe_pop_print([1,2,3], 5) # 5 index의 값을 가져올 수 없습니다.

# if 문
def safe_pop_print(list, index):
    if index < len(list):
        print(list.pop(index))
    else:
        print('{} index의 값을 가져올 수 없습니다.'.format(index))

safe_pop_print([1,2,3], 5) # 5 index의 값을 가져올 수 없습니다.

경우에 따라 예외처리대신 if else를 사용할 수 있다.

예외 이름 모를 때 처리 방법

# 모든 에러 처리
try:
    list = []
    print(list[0])  # 에러가 발생할 가능성이 있는 코드

    text = 'abc'
    number = int(text)
except:
    print('에러발생')

# 에러 이름 확인
try:
    list = []
    print(list[0])  # 에러가 발생할 가능성이 있는 코드

except Exception as ex: # 에러 종류
    print('에러가 발생 했습니다', ex) # ex는 발생한 에러의 이름을 받아오는 변수
    # 에러가 발생 했습니다 list index out of range

try 문: 잠재적인 예외 처리하기

파이썬에서 예외 처리를 올바르게 하는 방법은 try 문을 사용하는 것이다. try 문을 사용하면 다음과 같은 장점이 있다.

  • 정상 값과 구별하기 어려운 오류 코드 대신, 예외 객체라는 특별한 정보로 예외를 전달할 수 있다.
  • 함수 호출 속에서 예외가 발생하면 예외 객체가 함수 바깥으로 전달된다.
  • 예외가 발생할 것을 미리 확인하는 대신, 예외가 발생했을 때 처리하는 방법을 따른다.

EX) 숫자로 변환되는 것들만 리스트에 넣기

list_input_a = ['52', '273', '32', '버스', '103']

list_number = []
for item in list_input_a:
    try:
        float(item)
        list_number.append(item)
    except:
        pass
print('{} 내부에 있는 숫자는'.format(list_input_a))
print('{}입니다.'.format(list_number))

숫자로 변환할 수 없는 문자열이라면 float(item)를 실행할 때 예외가 발생한다.
이를 이용해서 try except 구문으로 감싸고 예외가 발생하지 않는 경우에만 list_number.append(item)가 실행되도록 만드는 코드이다.

try except 구문은 if구문을 활용하는 코드보다 약간 느리다는 단점이 있지만, 예외부분을 유연하게 처리하여 좀더 쉽게 코드를 작성할 수 있다는 장점이 있다.

참고자료

예외 처리

profile
Hello!

0개의 댓글