Python中与嵌套尝试异常相关的困惑

2024-06-28 20:01:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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。困惑的。请帮忙。在


Tags: 答案inforindexlendefrangeprint
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之前执行。在

相关问题 更多 >