如果最终返回值,则不会引发python异常

时间:2018-11-22 16:34:23

标签: python exception exception-handling try-except

任何人都可以解释为什么下面的示例不引发Exception吗?

def foo():
    try:
        0/0
    except Exception:
        print('in except')
        raise
    finally:
        print('in finally')
        return 'bar'

my_var = foo()
print(my_var)

这只会返回:

in except
in finally
bar

与没有return 'bar'语句的相同代码一起引发异常:

in except
in finally
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    my_var = foo()
  File "test.py", line 3, in foo
    0/0
ZeroDivisionError: division by zero

1 个答案:

答案 0 :(得分:1)

有关详细信息,请参见https://stackoverflow.com/a/19805813/1358308,但要简短

finally块应始终执行,因此Python必须忽略raise语句,因为这会违反语义