为什么`finally:return 42`清除未捕获的异常?

时间:2015-03-17 14:06:27

标签: python exception try-finally

今天,这篇有趣的python代码发布了on Twitter

def f():
    try:
        raise KeyError
    finally:
        return 42


g = f()

执行它时,f()会返回42,并且没有异常在我预期的情况下冒泡。用例如return 42替换pass时作为return语句,异常按预期在函数外传播。

但是,我想知道为什么在使用raise时并非如此。毕竟,还有一个未被捕获的例外。

这是否意味着python函数可以returnreturn,但{{1}}会自动清除异常?

0 个答案:

没有答案