猿问

“最终”语句在递归函数中执行两次 [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语句不能执行;

  • 除了语句获取触发器,它再次使用合法参数 2 调用该函数。

  • try 语句现在可以了;

  • else 语句打印 else

  • 最后声明打印 finally

为什么finally会打印两次?


慕尼黑5688855
浏览 209回答 1
1回答

尚方宝剑之说

当您使用 调用时f(0),finally块会被调用两次。一次用于调用 to f(2),然后再次用于封闭调用f(0)。这是因为4 / 0会导致异常,从而触发对fvia的第二次调用f(2)。finally将首先被调用以调用 to f(2),然后调用 to f(0)- 因为f(2)是从 调用的f(0)。
随时随地看视频慕课网APP

相关分类

Python
我要回答