Lazy loaded image
⚠️别让程序突然 “暴毙”!
字数 1753阅读时长≈ 5 分钟
2025-2-26
2025-3-26

⚠️别让程序 “暴毙”!🛡️用好 try-except 的三大避坑姿势

🛠️从除零暴击到文件失踪,一招拯救你的 Python 代码✅
 
💡
欢迎您在底部评论区留言,一起交流~

1️⃣ 为什么捕获异常?

想象一下:你开车时突然遇到一个路坑,如果直接压上去,车会卡住。程序中的异常就像这些“路坑”,比如除以零、打开不存在的文件等。如果不处理,程序会直接崩溃!
核心价值:
  • 防止程序"猝死"
  • 处理"意料之外,情理之中"的错误
  • 提供友好的错误提示(而不是一堆红色报错)
  • 执行“善后”操作(比如关闭文件、释放资源)
  • 让程序拥有"容错能力",像游戏存档点一样安全🎮
灵魂三问 :
❓ 为什么不让程序直接崩溃?
❗ 因为用户会把你写的程序拖进垃圾桶里面(还可能留下差评🌟)
❓ 为什么需要友好的提示?
❗ "程序错误代码0x000001" 和 "亲,您输入的格式有误哦~" 哪个更贴心?
❓ 什么时候必须用异常处理?
❗ 当代码涉及「不可控因素」时:用户输入、文件读写、网络请求等

2️⃣ 捕获常规异常

🔧 基本语法

🚀 快速入门

未处理异常的情况:
捕获异常后的优雅处理:
输出:兄弟,不能除以零啊喂!

🎮 案例演示

场景:开发计算器时防止崩溃
使用场景:
  • 用户可能输入"three"代替3
  • 传感器返回异常数据
  • 任何不可预知的意外情况

3️⃣ 捕获指定异常

🔧 基本语法

📖 常见错误类型表

异常名称
触发条件
应用场景
ZeroDivisionError
除以0
计算比例时
FileNotFoundError
文件不存在
读写文件时
ValueError
数据类型错误
用户输入验证

🎯 案例演示

场景:文件读取防崩溃
为什么用指定捕获?
  • 避免误捕其他类型错误
  • 精准提示错误原因(比笼统提示更专业)

4️⃣ 捕获多个异常

🔧 基本语法

🎬 案例演示

场景:视频播放器错误处理
为什么需要?
  • 不同错误需要统一处理
  • 保持代码简洁(避免写多个except)

5️⃣ 捕获全部异常

🔧 基本语法

⚠️ 案例演示

场景:自动驾驶系统
使用原则:
  1. 仅在顶层代码使用
  1. 必须记录错误日志
  1. 禁止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
资源清理
无论是否异常都执行
💡 最佳实践:
  1. 先处理具体异常,再处理通用异常
  1. 重要资源操作放在finally中
  1. 记录错误但不暴露敏感信息
课后作业:
给你的天气查询程序添加异常处理:
  • 输入城市名时处理ValueError
  • 网络请求失败时提示"天气雷达被外星人劫持啦"
上一篇
掌握 Python 列表推导式
下一篇
📚 Python文件操作终极指南:从入门到实战

评论
Loading...