素材牛VIP会员
Python异常处理 流程
 Go***ng  分类:Python  人气:880  回帖:2  发布于6年前 收藏

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 ?

 标签:python

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv1 新人
十***刻 产品经理 6年前#1
  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
Lv6 码匠
su***an JAVA开发工程师 6年前#2

结果是 1 1 0

finalelseexcept之后执行

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取