我发现以下行为至少 很奇怪 :
def errors(): try: ErrorErrorError finally: return 10 print errors() # prints: 10 # It should raise: NameError: name 'ErrorErrorError' is not defined
return在finally子句中使用时,该异常消失。那是个错误吗?那在任何地方都有记录吗?
return
finally
但是真正的问题(我将标记为正确的答案)是: python开发人员允许这种奇怪行为的原因是什么?
您询问了有关Python开发人员的推理。我不能为他们说话,但是没有其他行为可以理解。函数可以返回值,也可以引发异常。它不能同时做到。“最终”子句的目的是提供“保证”运行的清除代码,而不管例外情况如何。通过在finally子句中放置一个return语句,您已经声明无论情况如何,无论什么情况,您都想返回一个值。如果Python行为符合您的要求,并引发了异常,则它将破坏“ finally”子句的约定(因为它将无法返回您告诉它返回的值)。