Python 简明教程

Python - Assertions

Assertions in Python

Python 中的断言是断言或假定条件为真的语句。如果条件变为 false,Python 会引发 AssertionError 异常。它们用于检测如果没有正确的代码就永远不会发生的编程错误。

  1. 最简单的考虑 assertions 的方法是将其比作 raise-if 语句(更准确地说,是 raise-if-not 语句)。测试表达式,如果结果为 false,则引发异常。

  2. assertions 由 assert 语句执行,这是 Python 中最新的关键字,在 1.5 版中引入。

  3. 程序员经常在函数开始时放置断言来检查有效输入,并在函数调用后检查有效输出。

The assert Statement

在 Python 中,断言使用 assert 关键字,后跟一个表达式。如果表达式计算结果为 False,会引发 AssertionError。以下是断言的语法 −

assert condition, message

其中,

  1. condition − 应该为 true 的布尔表达式。

  2. message (optional) − 如果断言失败,要显示的可选消息。

Using Assertions

断言通常在开发和测试阶段使用,以检查始终保持为真的条件。

Example

在以下示例中,我们使用断言来确保变量“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

Custom Error Messages

要在断言失败时显示自定义错误消息,请在 assert 语句的表达式后包含一个字符串 −

assert num >= 0 and num <= 100, "Only numbers in the range 0-100 are accepted"

Handling 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

Assertions vs. Exceptions

断言用于检查始终为真的内部状态和不变量。而异常有助于处理在正常执行期间可能出现的运行时错误和异常情况。

Python 优化模式(-O 或 python -O script.py )中默认禁用断言。因此,它们不应用于实施生产环境中程序正确运行所需的约束。