苦练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

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

相关推荐
俊哥V17 小时前
每日 AI 研究简报 · 2026-09-01
人工智能·ai
spencer_tseng17 小时前
[j2cache ehcache.xml]/tmp/.ehcache-diskstore.lock (Permission denied)
xml·linux·python·ehcache·[j2cache
Wendy不吃榴莲17 小时前
# AI短剧教程 - 《后西游记》开播后,AI影视为什么更考验“连续讲故事”?
人工智能·笔记·学习·ai·视频
木圭的AI时代指南17 小时前
AI江湖录①·斩杀线
人工智能·ai
Agudamu116117 小时前
B站学习视频怎么变笔记:用 Ai好记 + Obsidian 搭建个人知识库的完整教程
人工智能·笔记·学习·音视频
麦豆GEO17 小时前
GEO优化流量密码:吃透4大用户提问模型,精准拿捏AI自然流量
大数据·人工智能
dh27119877917 小时前
南京企业AI搜索“可见度之战”:GEO服务商竞合格局与选型逻辑
大数据·人工智能
Dawson Zhu17 小时前
多Agent系统共享记忆架构:从存储范式到分布式共识的技术剖析
人工智能·语言模型·架构·aigc·agi
小道士写程序17 小时前
自然语言处理NLP - 第4章 NLP任务地图:先定义输出再挑模型
人工智能
具身AGI17 小时前
模型懂物理吗?物理AI 物理推理 的新赛点
人工智能·深度学习·计算机视觉