PYTHON · 예외처리
어설션 활용
assert문으로 프로그램의 내부 불변조건(invariant)을 검증합니다.
예외처리중급assert어설션invariant검증
핵심 설명
assert문으로 프로그램의 내부 불변조건(invariant)을 검증합니다.
Python code
# 전제 조건 검증
def divide(a: float, b: float) -> float:
assert b != 0, "제수는 0이 될 수 없습니다"
return a / b
print(divide(10, 3)) # 3.333...
# 후위 조건 검증
def sort_list(data: list) -> list:
result = sorted(data)
assert all(result[i] <= result[i+1]
for i in range(len(result)-1)), "정렬 결과가 올바르지 않습니다"
return result
print(sort_list([3, 1, 4, 1, 5]))
# 클래스 불변조건
class BankAccount:
def __init__(self, balance: float):
self.balance = balance
self._check_invariant()
def _check_invariant(self):
assert self.balance >= 0, f"잔액이 음수: {self.balance}"
def withdraw(self, amount: float):
assert amount > 0, "출금액은 양수여야 합니다"
self.balance -= amount
self._check_invariant()
return self.balance
account = BankAccount(1000)
print(account.withdraw(300)) # 700
# assert vs raise
# assert: 내부 버그 검출 (개발 시)
# raise: 외부 입력 검증 (항상)
def public_api(user_input: str):
if not user_input: # raise 사용 (외부 입력)
raise ValueError("입력이 비어있습니다")
assert isinstance(user_input, str) # 내부 확인학습 팁
assert는 -O 플래그로 비활성화되므로, 사용자 입력 검증에는 사용하지 마세요.
주의할 점
python -O로 실행하면 모든 assert가 제거됩니다. 보안이나 외부 입력 검증에는 raise를 사용하세요.
자주 묻는 질문
어설션 활용란 무엇인가요?
assert 문으로 프로그램의 내부 불변조건(invariant)을 검증합니다.
어설션 활용 학습 시 주의할 점은 무엇인가요?
python -O 로 실행하면 모든 assert가 제거됩니다. 보안이나 외부 입력 검증에는 raise 를 사용하세요.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.