def FancyDivide(numbers, index):
try:
try:
denom = numbers[index]
for i in range(len(numbers)):
numbers[i] /= denom
except IndexError, e:
FancyDivide(numbers, len(numbers) - 1)
else:
print "1"
finally:
print "0"
except ZeroDivisionError, e:
print "-2"
功能输出
^{pr2}$我只希望答案是-2,但为什么是0。根据我的说法,ZeroDivisionError应该被最后一个except语句捕获,因此答案应该是-2。困惑的。请帮忙。在
你说得对,ZeroDivisionError将被外部的
try
块捕获,但是finally
子句在离开它们各自的try
块之前总是执行(即使在其中引发了异常)。在所以在您的例子中,内部
try
引发异常,内部finally
被执行,然后外部的try
捕获异常。在更多信息:https://docs.python.org/2/tutorial/errors.html#defining-clean-up-actions
无论是否抛出
finally
,都将执行finally
块。在由于代码在嵌套的
try
内引发异常,关联的finally
块将在外部except
之前执行。在相关问题 更多 >
编程相关推荐