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

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

相关推荐
软件聚导航7 小时前
从 AI 画马到马年红包封面,我还做了一个小程序
人工智能·chatgpt
啊森要自信7 小时前
CANN ops-cv:AI 硬件端视觉算法推理训练的算子性能调优与实战应用详解
人工智能·算法·cann
要加油哦~7 小时前
AI | 实践教程 - ScreenCoder | 多agents前端代码生成
前端·javascript·人工智能
玄同7657 小时前
从 0 到 1:用 Python 开发 MCP 工具,让 AI 智能体拥有 “超能力”
开发语言·人工智能·python·agent·ai编程·mcp·trae
新缸中之脑7 小时前
用RedisVL构建长期记忆
人工智能
J_Xiong01177 小时前
【Agents篇】07:Agent 的行动模块——工具使用与具身执行
人工智能·ai agent
SEO_juper7 小时前
13个不容错过的SEO技巧,让您的网站可见度飙升
人工智能·seo·数字营销
小瑞瑞acd7 小时前
【小瑞瑞精讲】卷积神经网络(CNN):从入门到精通,计算机如何“看”懂世界?
人工智能·python·深度学习·神经网络·机器学习
CoderJia程序员甲8 小时前
GitHub 热榜项目 - 日榜(2026-02-06)
人工智能·ai·大模型·github·ai教程
wukangjupingbb8 小时前
AI多模态技术在创新药研发中的结合路径、机制及挑战
人工智能