python3 assert

斷言(assert)

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

函數原型:assert expression

作爲一條特殊的編程語句,檢查表達式的正確性,可以理解爲“這裏一定是成立的”,如果表達式不成立(False),則拋出異常。

assert expression

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

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

應用場景

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

示例

#  一、單一表達式
a = 10
assert a > 0
print('[a = 10] assert a > 0', 'ok')

# 二、多表達式
b = -1
assert a > 0, b < 0
print('[a = 10, b = -1] assert a > 0, b < 0', 'ok')

# 三、嘗試捕獲 assert 異常
import traceback

try:
    assert a < 0
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 != 0
    return value / dividend

print('[my_div(10, 2)]', my_div(10, 2))     # 執行成功
print('[my_div(10, 0)]', my_div(10, 0))     # 拋出異常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章