Python中的断言与自定义错误抛出

今天,我们将深入学习错误处理,了解Python提供的两个强大工具:

  • assert语句用于调试
  • 🔥 raise关键字用于创建自定义错误

这些工具帮助我们及早捕捉错误,编写自验证代码,并优雅地处理无效输入——特别是在较大的程序或API中。


📦 你将学习到的内容

  • 什么是断言以及如何使用它们
  • 何时使用assert与异常
  • 如何引发内置和自定义异常
  • 实际案例
  • 最佳实践

✅ 1. 什么是assert

assert是一种调试工具,用于测试某个条件是否为True

如果条件为False,它会引发一个AssertionError并停止程序。

🔹 语法:

assert condition, "错误信息(可选)"

🧪 示例 1:简单断言

age = 20
assert age >= 18, "你必须至少18岁"
print("访问已授权!")
如果 age = 16,你会看到:
AssertionError: 你必须至少18岁

🤔 何时使用 assert

  • 当你想要检查必须始终为真的条件
  • 开发和调试期间非常有用
  • 不用于用户输入验证(请使用异常处理)

✅ 有助于及早捕捉内部逻辑错误


🔥 2. 使用 raise 引发错误

raise 关键字允许你在条件不满足时手动触发异常

🔹 示例:引发内置错误

age = -5
if age < 0:
raise ValueError("年龄不能为负数。")

这将停止程序并显示:

ValueError: 年龄不能为负数。

🛠️ 3. 创建自定义异常

您可以通过扩展 Python 的 Exception 类来定义自己的错误类。

🔹 示例:

class TooYoungError(Exception):
    pass

def check_age(age):
    if age < 18:
        raise TooYoungError("您必须年满 18 岁。")

check_age(16) # 引发 TooYoungError

自定义异常在应用程序具有特定规则时非常有用,例如最低订单金额、登录限制或年龄验证。


🚀 真实世界示例:银行取款

class InsufficientFundsError(Exception):
    pass
def withdraw(balance, amount):
if amount > balance:
raise InsufficientFundsError("余额不足。")
return balance - amount
print(withdraw(1000, 1200)) # 引发错误

🧠 断言与抛出:关键区别

特性 assert raise
使用场景 调试,内部检查 验证输入,真实错误
运行时使用 通常在生产环境中移除 在生产环境中使用
异常类型 始终引发 AssertionError 可以引发任何类型
消息 可选,仅限字符串 自定义消息和类型

📌 最佳实践

  • ✅ 使用 assert 进行内部开发时检查
  • ✅ 使用 raise 处理用户可见或预期的错误情况
  • ❌ 不要依赖 assert 进行输入验证
  • ✅ 创建自定义异常以清晰地处理业务逻辑
  • 🧼 保持错误消息清晰且有用

今天你学到了:

    • 如何使用 assert 在开发过程中验证假设
    • 如何使用 raise 抛出内置或自定义异常
    • 如何定义和使用自己的异常类
    • 业务逻辑和错误报告的实际案例

更多