鍍金池/ 問答/Python/ Python異常處理 流程

Python異常處理 流程

1.關(guān)于下面這段代碼的執(zhí)行邏輯是怎樣的,為什么會輸出兩個(gè) 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)  

請問最終結(jié)果為什么不是 1,0 ?

回答
編輯回答
澐染
  1. 一開始index=4則進(jìn)入了except IndexError, e:,調(diào)用了FancyDivide(numbers, 2)
  2. 調(diào)用FancyDivide(numbers, 2)不會出現(xiàn)IndexError,也不會出現(xiàn)ZeroDivisionError,所以一切正常就進(jìn)入else:,所以打印了1
  3. 然后運(yùn)行finally:打印了0,然后FancyDivide(numbers, 2)執(zhí)行結(jié)束
  4. 回到最初的FancyDivide([0, 2, 4], 4)調(diào)用,因?yàn)榘l(fā)生了異常,所以不會進(jìn)入else,直接到了finally:打印了0
2018年7月25日 21:02
編輯回答
來守候

結(jié)果是 1 1 0

finalelseexcept之后執(zhí)行

2018年1月23日 22:57