Python 中的断言
Python 中的断言是断言或假设条件为 true 的语句。如果条件被证明为 false,Python 将引发 AssertionError 异常。它们用于检测如果代码正确则永远不会发生的编程错误。
- 考虑断言的最简单方法是将其比作 raise-if 语句(或者更准确地说,raise-if-not 语句)。测试表达式,如果结果为 false,则会引发异常。
- 断言由 assert 语句执行,这是 Python 的最新关键字,在 1.5 版中引入。
- 程序员通常将断言放在函数的开头以检查有效的输入,并在函数调用之后放置断言以检查有效的输出。
assert 语句
在 Python 中,断言使用 assert 关键字后跟表达式。如果表达式的计算结果为 False,则会引发 AssertionError。以下是断言的语法 -
assert condition, message
哪里
- condition -应为 true 的布尔表达式。
- message (可选) -断言失败时显示的可选消息。
使用断言
断言通常在开发和测试阶段用于检查应始终为 true 的条件。
例在下面的示例中,我们使用断言来确保变量 “num” 在 “0” 到 “100” 的有效范围内。如果断言失败,Python 会引发“AssertionError”,阻止后续 print 语句的进一步执行 -
print('Enter marks out of 100:')
num = 75
assert num >= 0 and num <= 100
print('Marks obtained:', num)
num = 125
assert num >= 0 and num <= 100
print('Marks obtained:', num) # This line won't be reached if assertion fails
以下是上述代码的输出 -
Enter marks out of 100:
Marks obtained: 75
Traceback (most recent call last):
File "/home/cg/root/66723bd115007/main.py", line 7, in <module>
assert num >= 0 and num <= 100
AssertionError
Marks obtained: 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, "Only numbers in the range 0-100 are accepted"
处理 AssertionError
可以像任何其他异常一样使用 try-except 块来捕获和处理断言。如果它们没有被处理,它们将终止程序并产生一个回溯 -
try:
num = int(input('Enter a number: '))
assert num >= 0, "Only non-negative numbers are accepted"
print(num)
except AssertionError as msg:
print(msg)
它将产生以下输出 -
Enter a number: -87
Only non-negative numbers are accepted
Only non-negative numbers are accepted
断言与异常
断言用于检查内部状态和应始终为 true 的不变量。而 exceptions 有助于处理正常执行期间可能发生的运行时错误和异常情况。
默认情况下,在 Python 的优化模式(-O 或 python -O script.py)中禁用断言。因此,它们不应用于强制实施程序在生产环境中正确运行所需的约束。