Python - 断言

你好,有抱负的程序员们!今天,我们将深入探讨 Python 的断言世界。作为你友好的邻居计算机老师,我很兴奋地引导你了解这个迷人的话题。让我们一起开始这段旅程吧!

Python - Assertions

Python 中的断言

想象一下你正在建造一个树屋。在开始钉木板之前,你不会先确保你的基础是坚实的,对吧?这正是编程中断言所做的。它们帮助我们检查在继续代码之前某些条件是否为真。

在 Python 中,断言是一种方式来表达,“我相信这个条件是真的,如果不是,那就有大问题了!”它们就像是代码中的小检查点,确保一切都在按预期进行。

assert 语句

Python 中断言的基本语法非常简单:

assert condition, message

这里,condition 是我们要检查的东西,而 message 是一个可选的解释,如果断言失败则会显示。

让我们看一个简单的例子:

x = 5
assert x == 5, "x 应该是 5"
print("代码继续...")

在这种情况下,断言会静默通过,因为 x 确实是 5,我们的代码继续运行。但是如果我们改变 x 的值呢?

x = 10
assert x == 5, "x 应该是 5"
print("这一行永远不会被执行!")

哎呀!这将引发一个 AssertionError,并带有我们的自定义消息“x 应该是 5”。

使用断言

断言在各种情况下都非常有用。让我们探讨一些:

1. 检查函数输入

def calculate_rectangle_area(length, width):
    assert length > 0 and width > 0, "长度和宽度必须是正数"
    return length * width

# 这将工作
print(calculate_rectangle_area(5, 3))

# 这将引发一个 AssertionError
print(calculate_rectangle_area(-1, 3))

在这里,我们确保没有人试图计算具有负数或零尺寸的矩形的面积。那会是一个相当奇特的矩形,不是吗?

2. 验证内部状态

class BankAccount:
    def __init__(self, initial_balance):
        self.balance = initial_balance
        assert self.balance >= 0, "初始余额不能为负"

    def withdraw(self, amount):
        assert amount > 0, "取款金额必须是正数"
        assert self.balance >= amount, "资金不足"
        self.balance -= amount

account = BankAccount(100)
account.withdraw(50)  # 这可以工作
account.withdraw(60)  # 这会引发一个 AssertionError

在这个例子中,我们使用断言来确保我们的银行账户行为正确。我们不能从一个负余额开始,也不能取走比我们有的更多的钱。如果真银行能这么严格就好了!

自定义错误消息

正如我们所见,我们可以向我们的断言添加自定义错误消息。这些消息在调试时非常有帮助:

def divide(a, b):
    assert b != 0, f"不能除以 {a} 的零"
    return a / b

print(divide(10, 2))  # 这可以工作
print(divide(10, 0))  # 这会引发一个带有我们自定义消息的 AssertionError

处理 AssertionError

有时,我们可能想要捕获并处理 AssertionError,而不是让它们崩溃我们的程序。我们可以使用 try-except 块来实现:

def risky_function(x):
    assert x > 0, "x 必须是正数"
    return 1 / x

try:
    result = risky_function(-5)
except AssertionError as e:
    print(f"一个断言失败了: {e}")
    result = None

print(f"结果是: {result}")

这允许我们的程序即使在断言失败的情况下也能继续运行,这在某些情况下可能很有用。

断言与异常

你可能会想,“我们有异常,为什么还要用断言?”这是一个好问题!让我们来看看关键的区别:

断言 异常
用于检查程序员的错误 用于处理运行时错误
应用于永远不应该发生的情况 用于预期的错误条件
可以全局禁用 始终激活
主要作为调试辅助 错误处理策略的一部分

断言就像是我们在过山车开始前做的安全检查。异常更像是如果过山车行驶中出现问题时抓住我们的安全带。

总之,断言是 Python 程序员工具箱中的一种强大工具。它们通过早期捕获潜在问题,帮助我们编写更健壮、更可靠的代码。请记住,当你的代码中出现意外情况时,快速且大声地失败总是更好的选择。

在你继续 Python 之旅时,请记住断言。它们就像是忠诚的守护者,守护着你的代码,确保一切都在按预期进行。祝编码愉快,未来的 Python 达人们!

Credits: Image by storyset