Python 中的 AssertionError

2024 年 8 月 29 日 | 4 分钟阅读

在评估软件后,我们可以根据测试策略将断言设置为开启或关闭。

将断言与 raise-if 子句进行比较是理解它的最简单方法(或者更准确地说,是 raise-if-not 子句)。当一个短语被测试时,如果结果为假,将触发一个异常。assert 子句是 Python 1.5 版本中添加的最新术语,用于执行断言。

程序员经常使用断言来验证输入是否在函数开头有效,以及在方法调用结束时验证输出是否有效。

Python 中的 assert 语句

当 Python 遇到 assert 子句时,它会分析前面的语句,假定它是正确的。如果语句不正确,Python 将引发一个 AssertionError 异常。

assert 语句的语法是:

assert Expression[, Arguments]

如果断言的结果为 False,Python 将使用 ArgumentExpression 作为 AssertionError 的参数。我们可以使用 try-except 子句来捕获和解决 AssertionError 错误,就像处理任何其他异常一样,但是,如果它们没有被处理,程序将崩溃,Python 将生成一个错误的回溯。

Assertion Error

在编写代码时,assert 子句是一种编程结构,它允许用户在模块开始之前指定一个要确认的前置条件。如果条件满足,控制将进入下一行代码。如果答案为 False,则应用程序将终止并抛出 AssertionErrorException。

assert 短语的作用与它所写的编程语言无关,只有语法会因计算机语言而异。

使用 assert 语句的示例

带错误消息的断言错误

这是一个将温度从开尔文转换为华氏度的方法。如果程序检测到负温度,它将终止,因为 0 开尔文是可能的最低温度。

代码

输出

AssertionError                            Traceback (most recent call last)
Cell In [2], line 10
      8 print(KelvinToFahrenheit(270))
      9 print(int(KelvinToFahrenheit(510.78)))
---> 10 print(KelvinToFahrenheit(-10))

Cell In [2], line 5, in KelvinToFahrenheit(Temp)
      4 def KelvinToFahrenheit(Temp):
----> 5     assert (Temp >= 0), "Given temperature is colder than absolute zero"
      6     return ((Temp - 273) * 1.8) + 32

AssertionError: Given temperature is colder than absolute zero

Python 的内置默认异常处理程序要么不打印程序员编写的错误消息来处理问题,要么两者都处理。

两种方法都是合法的。

在 Python 中处理 AssertionError 异常

由于 AssertionError 是 Exception 类的继承类,因此有两种潜在的方法来处理此错误。第一种是用户手动处理错误,第二种是由默认异常处理程序处理错误。

我们在示例 1 中已经熟悉了 Python 的默认异常处理程序是如何工作的。

现在让我们深入了解如何手动管理它。

代码

输出

Dividing by Zero: Invalid input is given.

测试我们的程序

代码

输出

The coefficient of the quadratic term is zero. Hence given equation is not quadratic.
Roots of the given equation are imaginary.
Roots of the given quadratic equation are: -1.5  -0.5714285714285714
Roots of the given quadratic equation are: -0.8446457824128544  -0.9265525406597518

这说明了当 assert 条件为 False 时,此异常如何立即暂停程序执行。

其他用例

其他有益的用途包括:

  • 验证参数值是否正确提供。
  • 验证所需输入的正确类型。
  • 发现其他编码器是否滥用接口。
  • 验证函数的输出类型。