본문 바로가기
Python

[Python] 파이썬 assert 사용법 및 예제

by A6K 2022. 11. 7.

프로그래머가 작성한 소스코드는 시간이 지남에 따라 기능이 추가되고 버그가 수정되면서 조금씩 바뀐다. 이렇게 바뀌다보면 프로그램의 일부 소스코드가 처음 의도한대로 사용되지 않을 가능성이 있다. 일부 기능들은 의도한대로 동작하지 않을 경우 치명적일 수도 있다. (예를 들어 파일을 삭제한다던지...)

파이썬 assert

이런 치명적인 오류를 막기 위해서 소스코드 중간중간 assert 구문을 넣을 수 있다. assert는 '주장하다', '확고히하다'라는 뜻을 가지고 있는 영단어다. 즉, assert 구문이 들어가는 코드부분에서 어떤 조건이 참임을 확고히하는 것이다. 그 조건이 거짓이면 에러상황으로 실행을 계속하지 못하게 하는 것이다.

파이썬의 assert 구문은 다음과 같은 문법으로 사용할 수 있다.

assert [조건식], [메시지]

조건식으로는 조건문처럼 True, False를 판단할 수 있는 표현식이 사용된다. 만약 이 식이 False면 콤마(,) 뒤 쪽에 있는 메시지를 담아 AssertionError가 발생한다.

예를 들어보자.

def test(age):
  assert type(age) is int, 'age 값은 정수만 가능'
  assert age > 0, 'age 값은 양수만 가능'

age = 1
test(age)

age = -10
test(age)

# Traceback (most recent call last):
#   File "./test.py", line 12, in <module>
#     test(age)
#   File "./test.py", line 6, in test
#     assert age > 0, 'age 값은 양수만 가능'
# AssertionError: age 값은 양수만 가능

인자를 받아서 int 타입인지 그리고 0보다 큰 값인지 테스트하는 test() 함수를 정의했다. 1을 넘겨주면 정수이고, 양수이므로 코드가 진행된다. 반면 -10의 경우 int 타입이지만 음수이므로 두 번째 assert 문에서 조건을 만족하지 않아 AssertionError가 발생한다.

물론 if 구문으로 조건식을 판단해서 AssertionError 대신 다른 Error를 raise 하도록 코드를 작성해도 좋다. 파이썬이 제공하는 assert 구문을 사용할 것인지 if 구문으로 직접 에러를 발생시킬지는 프로그래머 마음이다.

다만 소스코드 중간중간에 이런식으로 안전장치들을 마련해두는 것은 매우 좋은 습관이다. 

assert 무효화

파이썬의 assert 구문은 내부 변수인 __bebug__ 가 True로 설정되어 있는 경우에 실행된다. 파이썬 인터프리터를 실행하면 이 값이 기본적으로 True로 설정되어 assert 구문이 적용된다. 만약 파이썬 실행시 커맨드 라인에서 -O 옵션을 주면 __bebug__가 False로 선언되어 프로그램에 작성해두었던 assert 구문들이 실행되지 않는다.

그냥 실행하면 다음과 같이 AssertionError가 발생하는 코드가

$ python test.py
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    test(age)
  File "test.py", line 6, in test
    assert age > 0, 'age 값은 양의 정수만 가능'
AssertionError: age 값은 양의 정수만 가능

-O 옵션을 주면 AssertError가 발생하지 않는다.

$ python -O test.py

 

파이썬 스크립트 작성에 도움되는 글 모음

파이썬으로 프로그램을 작성할 때 도움되는 글들을 모아본다. 개발환경 [Python] macOS에 파이참 설치 [Python] 파이참 깃허브 연동 [Python] 파이썬 PIP란? [Python] VSCode를 이용한 개발환경 [Python] python3를

hbase.tistory.com

 

댓글