苦练Python第19天:断言与自定义异常
作者:Rahul Gupta
译者:倔强青铜三
前言
大家好,我是倔强青铜三 。是一名热情的软件工程师,我热衷于分享和传播IT技术,致力于通过我的知识和技能推动技术交流与创新,欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!
欢迎来到 100 天 Python 挑战 的 第 19 天 !
今天深入 异常处理 的两大杀器:assert
断言与 raise
自定义异常。早期抓 bug、优雅拒错输入,全靠它们。
📦 今日收获清单
assert
用法与适用场景raise
触发内建/自定义异常- 实战:银行取款、年龄校验
- 断言 vs 抛异常:何时用谁?
- 最佳实践与注意事项
✅ 1. 什么是 assert
assert
是调试神器:条件为 True
无事发生,为 False
立即抛出 AssertionError
并终止程序。
🔹 语法
python
assert 条件, "可选的异常信息"
🧪 示例:年龄门槛
python
age = 20
assert age >= 18, "You must be at least 18"
print("Access granted!")
若 age = 16
,输出:
makefile
AssertionError: You must be at least 18
🤔 何时用 assert
- 开发调试阶段:验证内部逻辑
- 永远不为用户输入兜底:用异常代替
🔥 2. 用 raise
主动抛异常
当条件不满足,主动触发异常,让调用方处理。
🔹 抛内建异常
python
age = -5
if age < 0:
raise ValueError("Age cannot be negative.")
运行即得:
makefile
ValueError: Age cannot be negative.
🛠️ 3. 自定义异常
继承 Exception
,让异常语义更清晰。
🔹 定义与使用
python
class TooYoungError(Exception):
pass
def check_age(age):
if age < 18:
raise TooYoungError("You must be at least 18 years old.")
check_age(16) # 触发 TooYoungError
🚀 实战:银行取款
python
class InsufficientFundsError(Exception):
pass
def withdraw(balance, amount):
if amount > balance:
raise InsufficientFundsError("Not enough balance.")
return balance - amount
print(withdraw(1000, 1200)) # 报错:InsufficientFundsError
🧠 断言 vs 抛异常:对照表
特性 | assert |
raise |
---|---|---|
场景 | 内部调试 | 输入校验、业务异常 |
生产环境 | 可被忽略 | 始终生效 |
异常类型 | 固定 AssertionError |
任意自定义 |
信息 | 仅字符串 | 可附带任意数据 |
📌 最佳实践
- ✅
assert
仅用于开发期内部检查 - ✅
raise
用于用户可见或预期异常 - ❌ 勿用
assert
做输入校验 - ✅ 自定义异常让业务逻辑更清晰
- 🧼 异常信息要清晰、可行动
🧠 一日精华
assert
是调试期的"自爆按钮"raise
让异常语义化、业务化- 自定义异常 = 高级代码沟通语言
- 用对工具,写更健壮、更优雅的 Python
最后感谢阅读!欢迎关注我,微信公众号 :
倔强青铜三
。欢迎点赞
、收藏
、关注
,一键三连!!!