我试着用谷歌搜索它,但找不到类似的问题。我确信这很傻,但我似乎不明白。
我有以下代码:
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)
调用的。