Python 中的断言是声明,用来断言或假设一个条件为真。如果条件被证明为假,则 Python 会引发 AssertionError
异常。它们用于检测那些在代码正确的情况下不应该发生的编程错误。
最容易理解断言的方法是将其视为一种“如果…引发”语句(或者说更准确的是“如果不…引发”语句)。测试一个表达式,如果结果为假,则会引发一个异常。
断言是由 assert
语句执行的,这是 Python 中最新的关键字,在版本 1.5 中引入。
程序员经常在函数开始处放置断言来检查有效的输入,并且在函数调用之后检查有效的输出。
断言语句
在 Python 中,断言使用 assert
关键字后面跟一个表达式。如果表达式的结果为 False
,则会引发 AssertionError
。以下是断言的语法:
assert condition, message
其中,
-
condition
— 一个应该为真的布尔表达式。
-
message
(可选)— 如果断言失败则显示的可选消息。
使用断言
断言通常在开发和测试阶段使用,以检查应该始终为真的条件。
示例
在下面的例子中,我们使用断言来确保变量 "num" 落在 "0" 到 "100" 的有效范围内。如果断言失败,Python 会引发 "AssertionError",阻止后续 print 语句的执行:
print('请输入 0 到 100 的分数:')
num = 75
assert num >= 0 and num <= 100
print('获得的分数:', num)
num = 125
assert num >= 0 and num <= 100
print('获得的分数:', num)
以下是上述代码的输出:
请输入 0 到 100 的分数:
获得的分数: 75
Traceback (most recent call last):
File "/home/cg/root/66723bd115007/main.py", line 7, in <module>
assert num >= 0 and num <= 100
AssertionError
自定义错误信息
为了在断言失败时显示自定义的错误信息,可以在 assert
语句中的表达式之后包含一个字符串:
assert num >= 0 and num <= 100, "只接受 0 到 100 范围内的数字"
处理 AssertionError
断言可以像处理其他异常一样被捕获和处理。如果它们没有被处理,它们将会终止程序并产生一个回溯:
try:
num = int(input('请输入一个数字: '))
assert num >= 0, "只接受非负数"
print(num)
except AssertionError as msg:
print(msg)
它将产生如下输出:
请输入一个数字: -87
只接受非负数
断言与异常
断言用于检查应该始终为真的内部状态和不变量。而异常则帮助处理可能在正常执行期间发生的运行时错误和异常情况。
在 Python 的优化模式(-O 或 python -O script.py)下,默认禁用断言。因此,在生产环境中不应使用断言来强制执行那些对于程序正确运行所必需的约束。