';最后';语句在递归函数[Python 3.6]p中执行两次
我试着用谷歌搜索,但没有发现类似的问题。我确信这是件愚蠢的事,但我似乎不明白 我有以下代码:';最后';语句在递归函数[Python 3.6]p中执行两次,python,recursion,python-3.6,Python,Recursion,Python 3.6,我试着用谷歌搜索,但没有发现类似的问题。我确信这是件愚蠢的事,但我似乎不明白 我有以下代码: def f(a): try: 4 / a except: f(2) else: print('else') finally: print("finally") 当我以0作为参数调用函数时:f(0) 它返回: else finally finally 因此,根据我的理解,这里是应该发生的事情: 0被馈送到
def f(a):
try:
4 / a
except:
f(2)
else:
print('else')
finally:
print("finally")
当我以0作为参数调用函数时:f(0)
它返回:
else
finally
finally
因此,根据我的理解,这里是应该发生的事情:
- 0被馈送到函数李>
- try语句无法执行它李>
- Exception语句获取触发器,它使用合法参数2再次调用函数
- try语句现在可以了李>
- else语句打印
else
- finally语句打印
finally
为什么
finally
会打印两次?使用f(0)
调用时,finally
块会被调用两次。一次用于调用f(2)
,然后再次用于附带调用f(0)
这是因为4/0
导致异常,该异常通过f(2)
触发对f
的第二次调用
finally
将首先调用f(2)
,然后调用f(0)
——因为如果将最后一行更改为print(“finally”,a),则从f(0)
调用finally
你应该能够看到发生了什么。为什么第二个最后
在成功执行后会被打印?@4247应该是这样的。所以else
和最终
都在else语句的范围内打印,对吗?最后一个finally
在f(0)的作用域内?因为对f(2)的调用在f(0)调用f(2)完成之前就完成了。哎呀,我忘了我输入了一个新的作用域,而不是回到开头。谢谢大家!