嵌套的try-except-finally不能按预期工作

时间:2020-03-24 09:43:33

标签: python exception try-catch

我有以下示例函数:

def test():
    try:
        try:
            x =1
        except:
            x = 2
        finally:
            print('X')
            x = 7
            return x
    except Exception:
        x=2
    finally:
        x = 9
        return x

print(test())

基于此,我希望test()总是返回7(第一次返回),但是即使到达x = 7行(打印'X'),它也返回9。怎么会这样?

1 个答案:

答案 0 :(得分:3)

来自docs

如果存在finally子句,则finally子句将作为 try语句完成之前的最后一项任务。 finally子句运行 try语句是否产生异常。

(...)

  • 如果finally子句包含return语句,则返回的值将是finally子句的return语句中的值,而不是
    try子句的return语句中的值。

您可能认为您有2个finally子句,但是第一个try子句中包含第一个子句,因此您的函数返回9

确实有意义