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

424*_*247 2 python recursion python-3.6

我试过谷歌搜索但无法找到类似的问题.我确信这是愚蠢的,但我似乎无法得到它.

我有以下代码:

def f(a):
    try:
        4 / a
    except:
        f(2)
    else:
        print('else')
    finally:
        print("finally")
Run Code Online (Sandbox Code Playgroud)

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

else
finally
finally
Run Code Online (Sandbox Code Playgroud)

所以在我的理解中,这是应该发生的事情:

  • 0被送到函数;
  • try语句不能执行它;
  • 除了语句获取触发器,它使用合法参数再次调用该函数,2.
  • try语句现在没问题;
  • else语句打印 else
  • 最后声明打印 finally

为什么要finally打印两次?

Owe*_*wen 7

当您调用时f(0),finally块被调用两次.一次呼叫f(2),然后再次呼叫f(0).

这是因为4 / 0导致异常,触发对fvia 的第二次调用f(2).

finally将首先调用f(2),然后调用f(0)- 因为f(2)从中调用f(0).