python try-finally

2019-01-27 13:20发布

问题:

Why does the exception in foo whizz by unnoticed, but the exception in bar is raised?

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

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

foo()
bar()

回答1:

From the Python documentation:

If the finally clause raises another exception or executes a return or break statement, the saved exception is lost.