2015-09-17 41 views
0
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" 

功能輸出有關嵌套混亂嘗試除了在Python

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

我只希望-2作爲答案,但爲什麼0。根據我ZeroDivisionError應該由除最後聲明,因此答案被抓應該是-2。困惑。請幫忙。

+0

你混淆'finally'(始終執行)與'else'(在沒有異常的執行)。 – chepner

回答

1

無論Exception是否被拋出,finally塊都會執行。

隨着您的代碼在嵌套try內拋出異常,相關的finally塊將在外部except之前執行。