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...