IT/Python

파이썬 assert, raise 차이점

엘티엘 2021. 1. 12. 19:30

파이썬에서 예외를 발생시키는 방법은 assert, raise 두가지가 있다.

그동안 크게 고민없이 사용했는데, 정리가 필요한것 같아 포스팅을 작성한다.

 

assert

아래처럼 사용법은 굉장히 간단하다.

cond = False

assert cond == True, "condition is not true"

에러가 발생할 경우, 아래처럼 화면에 에러문이 출력된다.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: condition is not true

그리고 한가지 주의할 점은 __debug__ 상수가 False라면 동작하지 않는다. (기본적으로 True 이다)

 

 

raise

사용방법은 역시나 간단하다.

if bottom == 0:
    raise ZeroDivisionError
    #raise Exception("bottom is zero")

에러가 발생할 경우, 아래처럼 화면에 에러문이 출력된다.

 

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ZeroDivisionError

 

assert, raise 언제 사용할까?

둘다 에러가 발생했음을 알려주고, 프로그램을 종료시킨다. 기능적응로 봐서는 큰 차이가 없어보인다.

하지만, assert는 __debug__ 상수가 False라면 동작하지 않는것 처럼, debugging이나 test 성격이 강하다.

__debug__ 상수에 따라서 동작하지 않을수 있으므로 실제 서비스코드에서는 사용을 지양해야 한다.

unittest 처럼 시험이나 디버깅을 위한 목적이라면 assert, 실제 서비스에게 상태를 알리는 것이 목적이라면 raise를 사용하자.

반응형