斷言(assert)
顧名思義,斷定此處是對的,如果錯了,那一定是有問題。
函數原型:
assert expression
作為一條特殊的程式設計語句,檢查表達式的正确性,可以了解為“這裡一定是成立的”,如果表達式不成立(False),則抛出異常。
assert expression
等價于下面的個句式:
if __debug__:
if not expression: raise AssertionError
assert也可以用于多個表達式的斷言:
assert expression1, expression2
應用場景
- 通常情況傳遞參數不會有誤,但編寫大量的參數檢查影響程式設計效率,而且不需要檢查參數的合法性。
- 排除非預期的結果。
示例
# 一、單一表達式
a =
assert a >
print('[a = 10] assert a > 0', 'ok')
# 二、多表達式
b = -
assert a > , b <
print('[a = 10, b = -1] assert a > 0, b < 0', 'ok')
# 三、嘗試捕獲 assert 異常
import traceback
try:
assert a <
except AssertionError as ae: # 明确抛出此異常
# 抛出 AssertionError 不含任何資訊,是以無法通過 ae.__str__()擷取異常描述
print('[AssertionError]', ae, ae.__str__())
# 通過 traceback 列印詳細異常資訊
print('[traceback]')
traceback.print_exc()
except: # 不會命中
print('assert except')
try:
raise AssertionError('test raise AssertionError')
except AssertionError as ae:
print('[raise AssertionError]', ae.__str__())
# debug 抛出異常;release 執行異常,顯示異常資訊,程序退出。
# assert a < 1
# 四、示例:函數參數檢查
def my_div(value, dividend):
assert dividend !=
return value / dividend
print('[my_div(10, 2)]', my_div(, )) # 執行成功
print('[my_div(10, 0)]', my_div(, )) # 抛出異常