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