def FancyDivide(list_of_numbers, index):
try:
try:
raise Exception("0")
finally:
denom = list_of_numbers[index]
for i in range(len(list_of_numbers)):
list_of_numbers[i] /= denom
except Exception, e:
print e
当调用函数时,我得到以下输出。
FancyDivide([0, 2, 4], 0)
integer division or modulo by zero
在try代码中引发异常。最后还有一个例外。为什么在finally中发现异常并不是try中的异常。
答案 0 :(得分:4)
在离开try语句之前总是执行finally子句,无论是否发生了异常。 当try子句中发生异常且尚未由except子句处理时(或者它发生在except或else子句中),在执行finally子句后重新引发它。 强>
(强调我的)
如上所述,异常 - Exception("0")
只会在完成finally
块后再次引发。但是因为finally
块中发生了异常,所以它被引发而不是Exception("0")
。