⚠️别让程序 “暴毙”!🛡️用好 try-except 的三大避坑姿势
🛠️从除零暴击到文件失踪,一招拯救你的 Python 代码✅
欢迎您在底部评论区留言,一起交流~
1️⃣ 为什么捕获异常?
想象一下:你开车时突然遇到一个路坑,如果直接压上去,车会卡住。程序中的异常就像这些“路坑”,比如除以零、打开不存在的文件等。如果不处理,程序会直接崩溃!
核心价值:
- 防止程序"猝死"
- 处理"意料之外,情理之中"的错误
- 提供友好的错误提示(而不是一堆红色
报错)
- 执行“善后”操作(比如关闭文件、释放资源)
- 让程序拥有"容错能力",像游戏存档点一样安全🎮
灵魂三问 :
❓ 为什么不让程序直接崩溃?
❗ 因为用户会把你写的程序拖进垃圾桶里面(还可能留下差评🌟)
❓ 为什么需要友好的提示?
❗ "程序错误代码0x000001" 和 "亲,您输入的格式有误哦~" 哪个更贴心?
❓ 什么时候必须用异常处理?
❗ 当代码涉及「不可控因素」时:用户输入、文件读写、网络请求等
2️⃣ 捕获常规异常
🔧 基本语法
🚀 快速入门
未处理异常的情况:
捕获异常后的优雅处理:
输出:
兄弟,不能除以零啊喂!🎮 案例演示
场景:开发计算器时防止崩溃
使用场景:
- 用户可能输入"three"代替3
- 传感器返回异常数据
- 任何不可预知的意外情况
3️⃣ 捕获指定异常
🔧 基本语法
📖 常见错误类型表
异常名称 | 触发条件 | 应用场景 |
ZeroDivisionError | 除以0 | 计算比例时 |
FileNotFoundError | 文件不存在 | 读写文件时 |
ValueError | 数据类型错误 | 用户输入验证 |
🎯 案例演示
场景:文件读取防崩溃
为什么用指定捕获?
- 避免误捕其他类型错误
- 精准提示错误原因(比笼统提示更专业)
4️⃣ 捕获多个异常
🔧 基本语法
🎬 案例演示
场景:视频播放器错误处理
为什么需要?
- 不同错误需要统一处理
- 保持代码简洁(避免写多个except)
5️⃣ 捕获全部异常
🔧 基本语法
⚠️ 案例演示
场景:自动驾驶系统
使用原则:
- 仅在顶层代码使用
- 必须记录错误日志
- 禁止
except: pass(会隐藏炸弹💣)
6️⃣ 异常的else和finally语法
🔧 基本语法
🔥 else:成功者的专属区域
核心作用:当且仅当try中代码没有异常时执行
🎯 对比案例
灵魂提问:
❓ 为什么不用
if-else替代?❗ 因为
else能处理所有可能的异常,而if需要穷举错误类型🛡️ finally:代码的临终遗言
核心特性:无论成功/失败/中途退出都会执行
⚡ 经典案例
输出:
🔥 三重验证实验
场景 | try代码 | 是否执行finally |
正常 | print("正常执行") | ✅ |
异常 | print(1/0) | ✅ |
中途退出 | return "退出" | ✅ |
📌 finally的三大铁律
1️⃣ 资源回收:关闭文件、数据库连接
2️⃣ 状态恢复:重置硬件设备
3️⃣ 必达操作:事务提交/回滚
📌 总结知识树
✅ 核心结构:
功能 | 语法 | 使用场景 | 注意事项 |
基础捕获 | try...except | 简单错误处理 | 会捕获所有异常 |
指定异常 | except ValueError | 精准处理特定错误 | 需要知道错误类型 |
多个异常 | except (A, B) | 多种错误统一处理 | 用元组包裹类型 |
全部异常 | except Exception | 未知错误处理 | 慎用避免隐藏bug |
else语句 | try...except...else | 正常流程处理 | 在无异常时执行 |
finally语句 | try...finally | 资源清理 | 无论是否异常都执行 |
💡 最佳实践:
- 先处理具体异常,再处理通用异常
- 重要资源操作放在finally中
- 记录错误但不暴露敏感信息
课后作业:
给你的天气查询程序添加异常处理:
- 输入城市名时处理
ValueError
- 网络请求失败时提示"天气雷达被外星人劫持啦"
- 作者:神秘人
- 链接:https://blog.tianjiaji.top//url/1a6183c0-6139-807d-8239-eb881c1d5fbd
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。










