PHpullh

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 메타데이터를 가집니다.