断言(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(, )) # 抛出异常