본 포스팅에서는 assert를 활용하는 법에 대해 얘기하고자 합니다.
assert
assert는 뒤의 조건이 True가 아니면 AssertError를 발생시킵니다.
예를 들어 특정 함수에 인자로 반드시 정수만을 입력받아서 처리하도록 만들었는데, 만약 실수 혹은 문자열이 들어온다면 오류가 발생할 것입니다.
이런 경우에는 if문을 사용할 수 도 있지만 assert문도 사용할 수 있습니다.
if문은 예외 처리를 위한 목적이 강하다면 assert는 특정 조건에 맞는지 확인하기 위한 목적입니다.
특정 조건에 맞는 것, 즉 보증이 되어야 한다는 말과 동일한데요. 변수 값이 자주 바뀌는 부분에서 특정 조건에 반드시 부합해야 하는 영역 앞에 assert를 배치하여 방어적 프로그래밍을 할 수 있습니다.
assert condition, message
구문은 위와 같고, condition (조건)이 참이면 패스되지만 조건이 거짓이면 AssertError와 함께 message가 출력됩니다.
message는 오류 메시지로 원하는 내용대로 입력할 수 있어 해당 문제를 신속하게 식별하고 디버깅할 수 있습니다.
예시
아래와 같이 예시를 구성하여 실행시켜 봅시다.
test = '1,2,3'
assert test == '1,2,3'
assert type(test) == str
이 부분에서는 당연히 오류가 발생되지 않습니다. test는 '1,2,3'이며 데이터 형식은 string이기 때문입니다.
test = 1
assert type(test) == str
"""
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
/_.ipynb Cell 2 in <cell line: 2>()
1 test = 1
----> 2 assert type(test) == str
AssertionError:
"""
test가 정수인데 assert 내의 조건은 string을 찾기 때문에 AssertionError가 발생됩니다. 다만, message를 따로 기입하지 않아서 공란으로 출력이 되었네요.
test = 1
assert type(test) == str, 'it is not string'
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last) /_.ipynb Cell 3 in <cell line: 1>()
----> 1 assert type(test) == str, 'it is not string’
AssertionError: it is not string
이번에는 message 인자에 입력한 데로 그대로 출력이 되는 것을 확인하실 수 있어요.
위 assert 프로세스와 같이 if문을 구성해 보겠습니다.
if type(test) == str:
pass
else:
raise Exception('it is not string')
"""
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
/aidata/lung/WORKSPACE/workspace_s/deep-lung-ln-02_v2/_.ipynb Cell 4 in <cell line: 1>()
2 pass
3 else:
----> 4 raise Exception('it is not string’)
Exception: it is not string
"""
굉장히 비효율적이고 가독성이 떨어집니다.
'Python' 카테고리의 다른 글
[Python] 파이썬에서 chatGPT 사용하는 법 (0) | 2023.02.23 |
---|---|
[Python] 여러개의 이미지 한번에 시각화 - matplotlib (0) | 2023.02.18 |
[Python] re를 활용하여 문자열을 리스트로 변환하기 (0) | 2023.02.12 |
[Python] sys.modules, __getattr__, __setattr__ 활용하기 (0) | 2023.02.11 |
[Python] try except 활용하여 오류 모아보기 (0) | 2023.02.08 |
댓글