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

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

相关推荐
怪奇云呼军2 分钟前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
chen_zn959 分钟前
《VLA 系列》π0 | Flow Matching 动作专家 | 跨本体机器人策略 | 论文与源码解析
人工智能·具身智能·vla
观远数据11 分钟前
先进制造业BI价值交付:三个车间数据场景与它们的ROI账本
大数据·人工智能
星辰_mya13 分钟前
国内气象数据平台业务规则——自用
大数据·人工智能
jikemaoshiyanshi15 分钟前
2026 AWS 中国峰会有哪些 AI Agent 专题演讲?按团队场景分层指南
大数据·人工智能
ZC跨境爬虫15 分钟前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
必须会一定会15 分钟前
DeepSeek API 峰谷定价实战:计算 8 月 17 日后的 Agent 成本,并启动 Harness 预览版
人工智能·ai编程
搞科研的小刘选手16 分钟前
【河南省科学院、河南工业大学主办 | 郑州举办】2026年计算机视觉与具身智能国际学术会议(CVEI 2026)
人工智能·计算机视觉·具身智能·学术会议·会议推荐
2601_9507607917 分钟前
H-2K(d)/IYSTVASSL流感HA四聚体:抗原特异性CD8+ T细胞检测的核心工具
人工智能·蛋白
烟雨江南78520 分钟前
大型展会和行业活动如何做实时字幕?——灵声智库多会场流式 ASR、统一转写与内容沉淀实践
人工智能·语音识别·ai客服·企业agent