编程学习网 > 编程语言 > Python > Python3.14之后,finally不能这样写了!
2025
05-28

Python3.14之后,finally不能这样写了!


今天再带大家学习一个Python 3.14的新特性。禁止在 finally 块中使用 return、break、continue 等控制流语句。这项更改由 PEP 765 提出,旨在提升代码的可读性和健壮性。

为什么禁止?

在 Python 的早期版本中,允许在 finally 块中使用如 return、break、continue 这样的控制流语句。虽然语法是合法的,但这种行为可能导致令人困惑的结果。

例如:

看起来函数应返回 1,但实际上 finally 中的 return 覆盖了原始返回值,最终输出的是 2。
这种“意外覆盖”行为违背了大多数开发者的直觉,容易引发逻辑错误。
并且会给后期排错工作造成很大的麻烦...
PEP 765 做了什么?
从 Python 3.14 开始,在 finally 块中使用以下控制流语句将引发SyntaxError:
return
break
continue
yield
await
yield from
PEP 765 仅明确禁止了return、break、continue 和 yield 在 finally 块中使用,但在 Python 3.14 的实际实现中,也扩展禁止了 yield from 和 await,以保证异步和生成器控制流的一致性。
示例:

注意:raise 仍被允许,因为它属于异常处理机制的一部分,不会造成类似的控制流混乱。
>> PEP 765入口 <<
设计初衷
Python 核心团队希望开发者将 finally 块用于资源清理等操作,而不是作为控制流程的一部分。
通过禁止这类行为,Python 强制提升了代码的一致性和可维护性。
如何替代?
如果你之前依赖在 finally 中进行条件跳转或返回,建议将相关逻辑移到 try 块中处理,只在 finally 中执行必要的清理工作:


最后强调

finally 块应专注于清理资源,而非改变程序流向。
如果未来需要把Python版本升到3.14 或更高版本,需要检查代码是否在 finally 中使用了上述控制流语句,及时调整以避免运行时错误造成Bug。

以上就是“Python3.14之后,finally不能这样写了!的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取