【问题标题】:what is the difference between returning from finally block in try-except-finally and outside of finally?在 try-except-finally 和 finally 之外从 finally 块返回有什么区别?
【发布时间】:2021-12-05 06:22:45
【问题描述】:

谁能解释一下-

def f():
    try:
        print('A', end=' ')
        raise ArithmeticError
    except:
        print('B', end=' ')
        raise AssertionError
    finally:
        print('C', end=' ')
        return

def f():
    try:
        print('A', end=' ')
        raise ArithmeticError
    except:
        print('B', end=' ')
        raise AssertionError
    finally:
        print('C', end=' ')
    return

第一个代码块不会引发任何异常并打印“A B C”,而第二个代码块会引发两个异常并打印“A B C”。

【问题讨论】:

  • 这能回答你的问题吗? Python try finally block returns
  • @AppleBS - 好吧,我明白 finally 是如何工作的,但我仍然不明白为什么在第一种情况下我没有看到任何异常

标签: python-3.x try-except


【解决方案1】:

因为无论是否引发异常,finally 都会保证执行。

因此,当您在 finally 块中return 时,您只是返回了 void 而不是异常(或任何其他先前返回的值)。

以此为例:

def f3():
    try:
        return "Try"
    finally:
        return "Finally"

当你打印f3()时,你会得到Finally

【讨论】:

    猜你喜欢
    • 2018-03-19
    • 1970-01-01
    • 2017-07-20
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多