跳至主要内容

如何在 Python 中使用 assert 语句

在 Python 中实现 assert 语句很简单:我们用 assert 来测试条件,如果条件为假则显示一条消息。
· 6分钟 阅读

使用 AI 探索

Python 编程中的 assert 语句是用来在代码中确立基本事实的工具。它通过帮助开发者验证代码中的假设来发挥作用。在本教程中,我们将掌握 Python 的 assert 语句,包括其语法、用法,以及在调试和错误检测中的应用。掌握 Python 的 assert 语句后,离成为一名专家级的Python 程序员又近了一步。 

简答:如何编写 Python 断言 

assert 语句的语法很直观:

assert condition, message

这里,condition 指被测试的表达式,而 message 是一个可选的错误消息,仅当断言失败时才会显示。

下面是几个您可以在 Python 代码中尝试的断言示例,帮助您上手。在第一个例子中,表达式 3<4>5 在逻辑上不正确,因此 Python 会抛出 AssertionError,并显示我们提供的消息:“Math does not work that way.” 在第二个例子中,表达式 0==0 是重言式(永真式),因此我们不会看到“This shouldn't throw an error.” 这条消息。 

assert 3<4>5, "Math does not work that way."
assert 0==0, "This shouldn't throw an error."

Python assert 语句概览

现在让我们更详细地了解 Python 的 assert 语句,包括其使用方式和原因。完成本教程后,您将熟练掌握如何在 Python 中使用 assert 语句。 

什么是 Python 断言?

更一般地说,编程中的断言是一种用于验证代码库中条件真实性的构造。换言之,它们是程序必须遵守的真值,否则就会抛出错误。Python 使用“assert”这个词,以非常直观的语法来实现这种编程断言:assert 语句允许我们创建这些断言。

何时使用 Python 断言

断言在调试、验证假设以及确保您的代码在特定条件下按预期运行方面极其有用。它允许您告诉计算机您期望它做什么,并在其行为偏离时让它停止。这在构建新程序、添加功能或更新现有应用时很有帮助。

在需要在代码库中强制执行前置条件、后置条件或不变式的场景中,断言表现尤为出色。它们充当护栏,一旦某些条件被违反,就会阻止代码继续执行,从而有助于及早发现潜在缺陷。

通过在代码中策略性地放置断言,您可以在更接近错误源头的地方捕获问题,简化调试过程。DataCamp 的 Python Developer 职业路径对各个水平的初学者和进阶开发者来说,都是练习函数式编程技能的绝佳课程,因为它包含基础与更高级概念的练习。

何时不应使用 Python 断言

尽管断言在开发过程中非常有用,但在某些情形下并不适合使用。

需要了解的是,当您的代码被编译用于生产环境时,断言可能会被全局禁用。这意味着您不应依赖断言来处理运行时问题,比如用户输入了错误数据。相反,它们应被用于开发阶段的问题,例如识别逻辑或数学上的不准确。

对于在生产代码中处理错误或验证数据,请考虑加入异常处理结构,以便让代码能够优雅地从错误中恢复,记录与调试相关的信息,并为用户提供有意义的反馈。

您可以通过阅读我们的Python 中的异常与错误处理教程,或参加我们的 Associate Data Scientist in Python 课程,来进一步了解如何发现并修正错误。 

Python 中使用 assert 语句的常见错误与误解

在 Python 中使用 assert 语句时,一个常见错误是使用了圆括号。这一错误可以理解,因为许多函数都使用圆括号,加入括号几乎成了条件反射。然而,assert 语句在技术上并不是 Python 中的函数,因此采用的是特殊语法。如果您使用了括号,很可能会遇到语法警告和逻辑错误。

在 assert 语句中使用括号导致错误的示例。SyntaxWarning: assertion is always true, perhaps remove parentheses?

另一个常见错误是忘记在条件后加逗号。这样会导致语法错误。

在 assert 语句中缺少逗号导致错误的示例。SyntaxError: invalid syntax

AssertionError 异常

每当断言条件被违反时,都会引发 AssertionError 异常。该错误会中止程序执行;您设置的任何可选错误消息都会被显示。鉴于断言主要用于开发阶段测试代码,如果您收到 Python 的 AssertionError 异常消息,通常需要严肃对待。它可能指向代码中的致命缺陷。

实践应用

assert 语句在 Python 中有许多实用场景。我们的交互式课程 Writing Functions in Python 提供了许多练习,能帮助您熟练掌握。以下是几个示例。 

在函数中使用 assert

一种有用的方式是将断言插入到函数中。这有助于确保您的函数按预期运行。

def divide(a, b):
assert b != 0, "Division by zero!"
return a / b

# Test cases
print(divide(10, 2))  # Output: 5.0
print(divide(8, 0))   # AssertionError: Division by zero!

将 assert 与 unittest 一起使用

测试代码是开发流程中的关键一步。Unittest 是一个旨在帮助您高效测试代码的库,它会用到 assert 语句。这也是我最常使用 assert 语句的方式。下面是一个您可能会在我们的 Introduction to Testing in Python 课程中看到的示例。 

import unittest

class TestMathFunctions(unittest.TestCase):
    def test_addition(self):
        self.assertEqual(2 + 2, 4)

    def test_subtraction(self):
        self.assertEqual(5 - 3, 2)

    def test_division(self):
        self.assertRaises(ZeroDivisionError, divide, 10, 0)

if __name__ == '__main__':
    unittest.main()

结语

Python 的 assert 语句是在开发阶段用于调试和验证代码条件的重要工具。虽然它在测试假设方面简单高效,但不应在生产环境中依赖它,因为在编译后的代码中可能被禁用。取而代之,应使用异常处理来实现健壮的错误管理。 

如需解答更多疑问,建议阅读我们的编码最佳实践与指南教程。

Amberle McKee

作者

Amberle McKee

我拥有博士学位,在生物研究环境中从事数据相关工作已有13年。我使用包括 Python、MATLAB 和 R 在内的多种编程语言开发软件。我热衷于与世界分享我对学习的热爱。

主题