天天看點

python3 assert斷言(assert)應用場景示例

斷言(assert)

顧名思義,斷定此處是對的,如果錯了,那一定是有問題。

函數原型:

assert expression

作為一條特殊的程式設計語句,檢查表達式的正确性,可以了解為“這裡一定是成立的”,如果表達式不成立(False),則抛出異常。

assert expression

等價于下面的個句式:
if __debug__:
    if not expression: raise AssertionError

assert也可以用于多個表達式的斷言:
assert expression1, expression2
           

應用場景

  1. 通常情況傳遞參數不會有誤,但編寫大量的參數檢查影響程式設計效率,而且不需要檢查參數的合法性。
  2. 排除非預期的結果。

示例

#  一、單一表達式
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(, ))     # 抛出異常