"final"语句在递归函数中执行两次 [Python 3.6]p



我试着用谷歌搜索它,但找不到类似的问题。我确信这很傻,但我似乎不明白。

我有以下代码:

def f(a):
try:
4 / a
except:
f(2)
else:
print('else')
finally:
print("finally")

当我调用以0为参数的函数时:f(0)
它返回:

else
finally
finally

因此,在我的理解中,以下是应该发生的事情:

  • 0被馈送到函数
  • try语句无法执行它
  • except语句获取触发器,触发器使用合法参数2再次调用函数
  • try语句现在可以了
  • else语句打印else
  • finally语句打印finally

为什么finally会打印两次?

使用f(0)调用时,会调用两次finally块。一次用于对f(2)的调用,然后再次用于对f(0)的封闭调用。

这是因为4 / 0导致异常,该异常触发经由f(2)f的第二次调用。

finally将首先被调用用于对f(2)的调用,然后被调用用于f(0)的调用——因为f(2)是从f(0)调用的。

最新更新