python try-finally

wim*_*wim 20 python exception finally try-catch

为什么foowhiz 中的异常被忽视,但bar引发了异常?

def foo():
    try:
        raise Exception('foo')
    finally:
        return

def bar():
    try:
        raise Exception('bar')
    finally:
        pass

foo()
bar()
Run Code Online (Sandbox Code Playgroud)

int*_*jay 29

Python文档:

如果finally子句引发另一个异常或执行return或break语句,则保存的异常将丢失.

  • @wim:我想,它会在函数末尾的局部变量的任何地方出现.查看它的一种方法是在`finally`块的末尾重新引发异常.由于`return`跳过了`finally`块的其余部分,因此重新提升异常永远不会发生. (8认同)
  • 有趣的!如果这个问题有意义,它会“去”哪里? (2认同)