이 남자는 귀찮아서 예외를 허용하지 않는다는 핑계로
아내랑 데이트 하기 싫어한다.
하지만 파이썬에서는 예외를 허용한다.
어떻게 허용하는 지 알아보자.
실습을 하다보면 오류를 빈번하게 마주하게 된다.
오류는 어떤 코드가 잘못됐는지 확인하고 수정할 수 있는 고마운 장점을 주지만,
가끔 오류를 무시하고 실행하고 싶을 때도 있다.
이는 파이썬에서 try, except를 사용해서 예외적으로 오류를 처리할 수 있게 해준다.
예외(exception)
는 코드를 실행하는 중에 발생한 에러를 뜻한다.
다음 코드를 실행시켜 보자.
def ten_div(x): res = 10 / x return res print(ten_div(2)) print(ten_div(0))
ten_div(2)는 문장은 잘 실행되지만,
ten_div(0) 문장은 4를 0으로 나누려니까 ZeroDivisionError 오류가 발생한다.
다음 코드를 보자.
a = [1, 2, 3] print(a[4])
a 리스트에서 a[4]는 얻을 수 없는 값이다.
따라서 IndexError가 발생한 것을 알 수 있다.
이런 오류들을 처리할 수 있는 예외 처리 기법을 알아보자.
try: x = int(input()) y = 10 / x print(y) except: print('예외가 발생했습니다.')
0을 입력했는데, ZeroDivisionError가 아닌 except 문이 실행됐다.
이처럼 try, except 문을 사용하면 오류가 발생한 문장 다음으로 넘어가지 않고,
바로 except 문이 실행된다.
즉, x = int(input()) 다음 문장부터는 실행되지 않는 것이다.
try: x = int(input()) y = 10 / x print(y) except ZeroDivisionError: print('0으로 나눌 수 없습니다.')
이 경우는 오류가 발생했을 때 except문에 미리 정해 놓은 오류 이름과 일치할 때만 except 문을 실행한다.
try: x = int(input()) y = 10 / x print(y) except ZeroDivisionError as e: print(e) except IndexError as e: print(e)
이 경우는 오류의 내용까지 알고 싶을 때 사용하는 방법이다.
try: a = [1,2] print(a[3]) print(4 / 0) except ZeroDivisionError as e: print(e) except IndexError as e: print(e)
이와 같이 먼저 발생한 예외의 처리코드만 실행된다.
(또는 예외 중 높은 계층의 예외부터 처리된다. 기반 클래스 > 파생 클래스)
참고
예외도 클래스 상속으로 구현되며
보통 파이썬에서 새로운 예외를 만들 때는 Exception을 상속 받아서 구현한다.
예외 처리 잘 써먹어보자~_~