异常调度室 · STEP BY STEP

异常不是“跳出程序”,而是改变路线

同一段 try / except / else / finally,会因异常类型和发生位置走出完全不同的轨迹。选一个场景,逐步放行,亲眼看清谁执行、谁跳过。

等待发车

执行线路

亮黄:当前 · 绿色:已完成 · 淡灰:跳过
try
风险代码
except
匹配处理器
else
try 成功才走
finally
离开前必经
后续
继续或重新抛出

except 从上往下匹配

except FileNotFoundError路径找不到
except ValueError内容无法转换
except OSError更宽的文件系统错误
try只把真正可能失败的语句放进来,范围越小,越容易看清错误来自哪里。
except只在类型匹配时接住异常;具体异常应写在更宽泛的异常之前。
else仅当 try 没抛异常时执行,适合放“读取成功后才做”的后续工作。
finally无论正常、已处理还是准备继续抛出,离开 try 语句前都会执行。
容易踩的坑:别在 finally 里随手写 return。它可能盖住原本应该继续传播的异常,让真正的问题悄悄消失。资源管理优先使用 with,让“无论如何都要关闭”这件事交给上下文管理器。