在没有 "except" 的情况下使用 "try"+"finally" 永远不会产生任何错误
Using "try"+"finally" without "except" never generates any error
我认为如果我使用 "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")
您可以在有关 the try statement 的部分中找到记录:
If the finally clause executes a return, break or continue statement, the saved exception is discarded.
当然,它是一个记录在案的行为这一事实并不能完全解释推理,所以我提出这个:一个函数只能以两种方式之一退出,通过return输入一个值或引发一个例外。它不能两者。
由于 finally 块通常用作清理处理程序,因此 return 在这里优先处理是有意义的。您确实有机会在 finally 中重新引发任何异常,只需不使用 return 语句即可。
我认为如果我使用 "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")
您可以在有关 the try statement 的部分中找到记录:
If the finally clause executes a return, break or continue statement, the saved exception is discarded.
当然,它是一个记录在案的行为这一事实并不能完全解释推理,所以我提出这个:一个函数只能以两种方式之一退出,通过return输入一个值或引发一个例外。它不能两者。
由于 finally 块通常用作清理处理程序,因此 return 在这里优先处理是有意义的。您确实有机会在 finally 中重新引发任何异常,只需不使用 return 语句即可。