Python 断言



Python 中的断言

Python 中的断言是声明,断言或假设一个条件为真。如果该条件结果为假,Python 将引发 AssertionError 异常。它们用于检测如果代码正确则永远不会发生的编程错误。

  • 理解断言最简单的方法是将其比作 raise-if 语句(或更准确地说,是 raise-if-not 语句)。测试一个表达式,如果结果为假,则引发异常。

  • 断言由 assert 语句执行,这是 Python 中最新引入的关键字,在 1.5 版中引入。

  • 程序员通常将断言放在函数的开头以检查有效输入,并在函数调用后检查有效输出。

assert 语句

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

assert condition, message

其中:

  • condition − 一个应该为真的布尔表达式。

  • message (optional) − 一个可选的消息,如果断言失败则显示。

使用断言

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

示例

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

自定义错误消息

要在断言失败时显示自定义错误消息,请在 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

断言与异常

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

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

广告