一尘不染

返回吃异常

python

我发现以下行为至少 很奇怪

def errors():
    try:
        ErrorErrorError
    finally:
        return 10

print errors()
# prints: 10
# It should raise: NameError: name 'ErrorErrorError' is not defined

returnfinally子句中使用时,该异常消失。那是个错误吗?那在任何地方都有记录吗?

但是真正的问题(我将标记为正确的答案)是:
python开发人员允许这种奇怪行为的原因是什么?


阅读 163

收藏
2020-12-20

共1个答案

一尘不染

您询问了有关Python开发人员的推理。我不能为他们说话,但是没有其他行为可以理解。函数可以返回值,也可以引发异常。它不能同时做到。“最终”子句的目的是提供“保证”运行的清除代码,而不管例外情况如何。通过在finally子句中放置一个return语句,您已经声明无论情况如何,无论什么情况,您都想返回一个值。如果Python行为符合您的要求,并引发了异常,则它将破坏“
finally”子句的约定(因为它将无法返回您告诉它返回的值)。

2020-12-20