Python - 断言



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

自定义错误消息

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

断言与异常

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

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