苦练Python第19天:断言与自定义异常

苦练Python第19天:断言与自定义异常

原文链接:dev.to/therahul_gu...

作者: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

最后感谢阅读!欢迎关注我,微信公众号倔强青铜三。欢迎点赞收藏关注,一键三连!!!

相关推荐
王小王-1239 分钟前
基于Python的二手车价格影响因素研究【多种机器学习对比、线性回归、MLP、SVR、LightGBM】
python·机器学习·汽车·二手车价格预测·二手车价格影响·汽车数据分析
java1234_小锋38 分钟前
一周学会Matplotlib3 Python 数据可视化-绘制饼状图(Pie)
开发语言·python·信息可视化
两棵雪松1 小时前
为什么RAG技术可以缓解大模型知识固话和幻觉问题
人工智能·rag
NEUMaple2 小时前
python爬虫(三)----Selenium
爬虫·python·selenium
未来智慧谷2 小时前
华为发布AI推理新技术,降低对HBM内存依赖
人工智能·华为
AKAMAI2 小时前
通过Akamai分布式计算区域实现直播传输
人工智能·分布式·云计算
坐在地上想成仙2 小时前
计算机视觉(4)-相机基础知识恶补
人工智能·数码相机·计算机视觉
拾光拾趣录3 小时前
基础 | HTML语义、CSS3新特性、浏览器存储、this、防抖节流、重绘回流、date排序、calc
前端·面试
sssammmm3 小时前
AI入门学习--如何写好prompt?
人工智能·学习·prompt
阿群今天学习了吗3 小时前
“鱼书”深度学习进阶笔记(3)第四章
人工智能·笔记·python·深度学习·算法