프로그램을 작성하다 보면 수많은 오류가 발생한다.
파이썬에서는 try, except, finally문을 이용해 실행 시 발생할 수 있는 오류들에 대한 예외처리를 할 수 있다.
try: 오류가 발생할 수 있는 코드 except: 예외 처리 finally: 오류와 상관없이 항상 실행되는 코드
다른 수를 0으로 나누면 발생하는 오류인 ZeroDivisionError를 예시로 들겠다.
print(1/0); >>Traceback (most recent call last): File ".............................................", line 1, in <module> print(1/0); ZeroDivisionError: division by zero
예외처리를 하기 위해서는 먼저 오류가 발생할 수 있는 코드를 try 키워드 내에 작성해준다.
이후 해당 오류를 except 뒤에 표시한 뒤 오류를 처리하는 코드를 except 키워드 내에 작성해준다.
try: print(1/0); except ZeroDivisionError: print("0으로는 나눌 수 없습니다."); >>0으로는 나눌 수 없습니다.
파이썬이 생성하는 오류 메시지도 직접 전달받을 수 있다.
try: print(1/0); except ZeroDivisionError as e: print(e); >>division by zero
except문은 여러개 작성 가능하다.
try: x=[0]; print(x[3]); except ZeroDivisionError as e: print(e); except IndexError as e: #존재하지않는 인덱스 참조 print(e); >>list index out of range
finally문 내에 작성한 코드는 오류가 발생하든 발생하지 않든 무조건 실행된다.
try: print(1/0); except ZeroDivisionError: print("0으로는 나눌 수 없습니다."); finally: print("finally~"); >>0으로는 나눌 수 없습니다. >>finally~
오류 발생시키기
파이썬에서는 raise문을 이용해 원하는 타입의 오류를 발생시킬 수 있다.
Ex) 상속받는 클래스에게 메서드 오버라이딩(재정의)를 강제하고 싶을 때.
class A: def play(self): raise NotImplementedError; #꼭 작성해야하는 부분을 구현하지 않았을때 발생시키는 오류 class B(A): pass; b=B(); print(b.play()); >>Traceback (most recent call last): File "............................................", line 9, in <module> print(b.play()); File "............................................", line 3, in play raise NotImplementedError; NotImplementedError
에러 클래스를 통해 객체를 생성하면 출력 시에 에러 메시지도 함께 출력할 수 있다.
raise IndexError("인덱스 에러") >>Traceback (most recent call last): File "...................................", line 1, in <module> raise IndexError("인덱스 에러") IndexError: 인덱스 에러
조건의 참 거짓으로 에러를 발생시키고 싶다면 assert문을 사용할 수도 있다.
x=1 assert x!=1, "x는 1입니다" #assert <<조건>>, <<에러메시지>> >>Traceback (most recent call last): File "..................................", line 2, in <module> assert x!=1, "x는 1입니다" AssertionError: x는 1입니다
조건이 거짓이면 입력받은 에러메시지와 함께 AssertionError를 발생시킨다.
'Python' 카테고리의 다른 글
Python - 빠른 입력 (0) | 2020.08.17 |
---|---|
Python - 함수 인자의 개수를 알 수 없을 때 (0) | 2020.08.11 |
Python - 클래스(Class)와 객체(Object) (0) | 2020.08.09 |
Python - 컬렉션 정리 (0) | 2020.08.04 |
Python - 딕셔너리 키(key), 값(value) 도치 (0) | 2020.08.04 |