我希望myfunction返回0而不执行finally,但是为什么这样做呢?
def myfunction(i):
try:
result=10/i
except:
return 0
finally:
return 10
print(myfunction(0))
答案 0 :(得分:0)
无论catch块中发生了什么,finally部分中的代码都将运行(除了您的程序在到达finally部分之前以某种方式终止的时间),如果您不希望它运行,则应像这样更改代码:
def myfunction(i):
try:
result=10/i
except:
return 0
return 10
答案 1 :(得分:0)
finally
始终执行,无论是否发生异常。在本质上,文档非常清楚:
无论是否发生异常,始终在离开try语句之前执行finally子句。如果try子句中发生了异常且未由except子句处理(或在except或else子句中发生),则在执行finally子句后重新引发该异常。
因此return
子句中的finally
语句将覆盖exception
子句中的语句。将return
语句放在finally
子句中没有多大意义,因为这将是从函数返回的唯一值。
答案 2 :(得分:0)
它返回10
是因为finally
块中的try
子句在this answer所示的任何return
语句之前执行。
还值得注意的是,您使用的是通用的except
,这会导致很多意想不到的行为。检查this answer,以了解如何最好地构造try/except
块和最佳raise
异常。