You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中try-except-finally结构finally块内外return的区别

两段Python代码的核心差异解析

两段代码的前半段执行逻辑完全一致:

  • 进入try块后首先打印A,主动抛出ArithmeticError
  • 异常被except块捕获后打印B,此时在except块内主动抛出AssertionError
  • 按照Python语法规则,finally块无论是否有未处理异常都会执行,所以两段代码都会执行打印C的逻辑

两者的核心差异就在于finally块内是否包含return语句:

  1. 第一段代码的finally块带有return
    Python语法规定:如果finally块中执行了return、break这类会直接跳转控制流的语句,那么之前在try/except块中产生的所有未抛出的异常都会被直接丢弃。也就是说except里抛出的AssertionError还没来得及传到函数外部,就被finally的return直接打断,函数正常结束返回,所以外部看不到任何异常。

  2. 第二段代码的finally块没有return
    finally块执行完打印C的逻辑后,没有控制流语句打断待抛出的异常,所以except块里抛出的AssertionError会继续向上传递到函数调用方,因此运行时会看到异常抛出。

简单总结:finally块中的return会静默吞噬所有待抛出的未处理异常,没有return时异常会正常向外传递,这就是两段代码一个抛异常一个不抛的核心原因。

内容的提问来源于stack exchange,提问作者user3267989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:15:06