Python异常处理 流程

Hobert
  • 15

1.关于下面这段代码的执行逻辑是怎样的,为什么会输出两个 0

2.代码:

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"

FancyDivide([0, 2, 4], 4)  

请问最终结果为什么不是 1,0 ?

回复
阅读 2.6k
2 个回答
起风了
  • 4.1k
✓ 已被采纳
  1. 一开始index=4则进入了except IndexError, e:,调用了FancyDivide(numbers, 2)
  2. 调用FancyDivide(numbers, 2)不会出现IndexError,也不会出现ZeroDivisionError,所以一切正常就进入else:,所以打印了1
  3. 然后运行finally:打印了0,然后FancyDivide(numbers, 2)执行结束
  4. 回到最初的FancyDivide([0, 2, 4], 4)调用,因为发生了异常,所以不会进入else,直接到了finally:打印了0

结果是 1 1 0

finalelseexcept之后执行

宣传栏