使用“try”+“finally”而不使用“except”永远不会产生任何错误

Ali*_*jas 6 exception try-finally python-3.x

我想如果我使用“try”并且只使用“finally”else,没有任何“except”,如果“try”语句无法执行,则应该执行“finally”语句,但之后,应该会出现错误在执行中显示,但在这个简单的代码中,我故意强制执行无效操作,错误永远不会跳转。为什么?

def division_peligrosa(a, b):
    try:
        a = float(a); b = float(b)
        return a/b
    finally:
        return "Aquí va haber un error..."

print (division_peligrosa(5,0))
print (division_peligrosa("dividendo",28.3))

print ("\nFin del programa, ¡pero nada ocurre!\n")
Run Code Online (Sandbox Code Playgroud)

pla*_*pus 10

您可以在有关try 语句的部分中找到记录:

如果 finally 子句执行 return、break 或 continue 语句,则丢弃保存的异常。

当然,它是记录在案的行为这一事实并不能完全解释推理,因此我提供了这一点:函数只能以两种方式之一退出,即返回值或引发异常。它不能两者兼而有之

由于 finally 块通常用作清理处理程序,因此返回优先在这里是有意义的。您确实有机会在 finally 内重新引发任何异常,只需不使用 return 语句即可。

  • 这是一个很好的答案,我只是想明确表示此行为与缺少 except 子句无关。在OP的示例中,如果添加“ except: raise”,则行为是相同的 (3认同)