프로그램을 작성하다 보면 수많은 오류가 발생한다.

파이썬에서는 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를 발생시킨다.

 

+ Recent posts