登录
首页 >  文章 >  python教程

Pythontryexceptfinally执行顺序详解

时间:2026-03-21 11:51:39 198浏览 收藏

Python中try-except-finally的执行顺序核心在于:无论代码是否正常运行、异常是否被捕获、函数是否提前return,finally块都必然执行,且总是在任何退出逻辑(包括return或异常抛出)真正生效前介入——它既是资源清理的“最终保障”,也拥有对返回值和异常的最终决定权,甚至能覆盖try/exept中的return结果或吞掉原有异常,这一机制看似简单却极易引发隐晦bug,深入理解其精确执行时机对编写健壮、可预测的异常处理代码至关重要。

Python try except finally 执行顺序详解

Python 中 tryexceptfinally 的执行顺序,核心在于:无论是否发生异常、是否被捕获、是否提前返回,finally 块**总是会执行**,且在 tryexcept 中的 return 语句“生效前”运行。

基本执行流程(无异常)

try 块中代码正常执行完毕,不抛出异常时:

  • 先执行 try 块全部语句
  • 跳过所有 except 块(不进入)
  • 再执行 finally
  • 最后继续执行后续代码(或函数返回)

发生异常且被 except 捕获

try 中某行抛出异常,且有匹配的 except 时:

  • 执行到异常发生处,立即停止 try 后续语句
  • 跳转至匹配的 except 块,执行其中代码
  • except 执行完后,立刻执行 finally
  • 再继续执行 finally 之后的代码

发生异常但未被 except 捕获

try 抛出异常,又没有匹配的 except 时:

  • try 中异常发生后立即中断
  • 跳过所有 except
  • 仍会执行 finally 块(这是关键!)
  • finally 执行完后,异常继续向上冒泡(原样抛出)

return 遇上 finally 的细节

如果 tryexcept 中有 return,实际返回值的确定和 finally 的关系容易混淆:

  • try 中有 return x:先记录返回值 x,再执行 finally
  • finally 中若也有 return y,则直接返回 y,覆盖之前记录的值
  • finally 中若没有 return,但修改了可变对象(如列表、字典),会影响返回结果
  • finally 中抛出新异常,会取代原异常(原异常丢失)

理解这个顺序的关键是记住:finally 是清理阶段的“最终保障”,它插在任何退出路径(正常结束、异常中断、return 返回)之前执行,且拥有对返回值和异常的最终决定权。

终于介绍完啦!小伙伴们,这篇关于《Pythontryexceptfinally执行顺序详解》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>