Python Asserts

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

Python 中的 assert 语句允许用户在代码中添加健全性测试。断言是一种检查,用户在编写代码时可以利用它来查看特定的假设是否仍然有效。如果任何断言变假,则我们的代码就存在缺陷。

断言将帮助用户提高代码的效率、健壮性和可靠性。在创建过程中,断言对于记录、故障排除和测试代码非常有用。在用户使用断言调试和测试代码后,他们可以禁用断言,使代码更具生产就绪性。

什么是断言?

断言对于调试代码很有用,因为它们允许用户通过测试某些条件是否仍然为真来验证代码的正确性。

除非我们的应用程序有问题,否则断言条件必须始终有效。如果条件为假,断言将引发异常并终止我们程序的运行。

断言允许我们创建检查,以确保代码中的不变量保持不变。例如,我们可以测试“此参数为 None”或“此返回类型确实是一个字符串”等条件。通过这种方式,我们可以测试前置条件和后置条件等概念。在构建程序时,这些测试可以帮助我们尽快发现缺陷。

断言的好处是什么?

断言主要用于调试目的。当用户添加新功能和修复现有功能时,它们可以确保用户不会给我们的程序带来新问题。然而,在开发阶段,它们可能还有其他有趣的用途。例如,记录和验证他们的代码就是这些用例。

断言的主要目的是在程序出现问题时发出警报。在这种情况下使用假设。确定此条件是否仍然有效。否则,引发异常。

在实践中,我们可以在开发过程中使用断言来验证程序中的前置条件和后置条件。例如,程序员经常在函数开头使用 assert 语句来确保输入参数是正确的(前置条件)。断言也用作函数返回参数的前置条件,以确保结果是正确的(后置条件)。

断言表明我们希望查看某个条件是否为真并将保持为真。在 Python 中,它们可以选择包含一个可选消息来阐明问题或麻烦。因此,它们也是代码文档的有用工具。在这种情况下,它们的主要优势在于它们能够采取有意义的行动,而不是像注释和文档字符串那样被动。

何时不能使用断言?

原则上,不应使用断言来处理信息或检查数据,因为断言可以在源程序中禁用,从而删除任何基于断言的处理和验证代码。正如我们将通过使用断言进行数据处理或验证来看到的,这是一个常见的错误。

Python 中的 assert 关键字

此语句接受一个布尔条件作为输入,当返回 true 时,它不做任何事情并继续执行正常流程。但是,如果计算结果为 false,它将引发 AssertionError 以及提供的可选消息。在 Python 中,assert 关键字有助于实现此任务。

语法

参数:条件:布尔测试返回 True 或 False。

error_message:在 AssertionError 实例中显示在屏幕上的可选参数。

返回值:如果提供了错误消息,则返回带有错误语句的 AssertionError。

不带消息的 assert 关键字示例

代码

输出

Checking for x and y : 
9.0

不带错误消息的 assert 关键字

代码

输出

Checking for x and y : 
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Input In [10], in ()
      7 # checking the divisibility using assert statements
      9 print("Checking for x and y : ")
---> 10 assert x%y == 0, "Not completely divisible"
     11 print(x / y)

AssertionError: Not completely divisible

这在任何开发领域的测试和质量控制工作中都更有用。根据应用程序,使用各种类型的断言。以下是一个简化软件演示,该软件仅允许包含所有热餐的批次发货;否则,整个批次将被拒绝。

代码

输出

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Input In [13], in ()
      9 # using assert statement to check the batch
     10 for b in batch:
---> 11     assert b >= 26, f"Batch {b} is Not To be Supplied"
     12     print(str(b) + " is O.K.")

AssertionError: Batch 23 is Not To be Supplied

下一个主题Python 位运算符