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

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

相关推荐
haosend35 分钟前
AI时代,传统网络运维人员的转型指南
python·数据网络·网络自动化
曲幽1 小时前
不止于JWT:用FastAPI的Depends实现细粒度权限控制
python·fastapi·web·jwt·rbac·permission·depends·abac
鹏程十八少1 小时前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
风象南8 小时前
我把大脑开源给了AI
人工智能·后端
Johny_Zhao10 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
飞哥数智坊10 小时前
我帮你读《一人公司(OPC)发展研究》
人工智能
哈里谢顿12 小时前
1000台裸金属并发创建中的重难点问题分析
面试
哈里谢顿12 小时前
20260303面试总结(全栈)
面试
冬奇Lab14 小时前
OpenClaw 源码精读(3):Agent 执行引擎——AI 如何「思考」并与真实世界交互?
人工智能·aigc
没事勤琢磨16 小时前
如何让 OpenClaw 控制使用浏览器:让 AI 像真人一样操控你的浏览器
人工智能