2013-01-22 114 views
0

我有一個在另一個函數內調用的函數的代碼(重構的結果)。同一異​​常的多個異常處理程序

所以在被調用的函數中,我有一大塊try-catch語句。

def Called(): 
    try: 
     #All statements for the function in the try block. 
    except A: 
     # Exception handler. 
    except B: 
     # Exception handler. 
    except A: 
     # Exception handler. 

我遇到的問題是我需要捕獲兩個相同類型的異常(在調用函數的不同位置)。然後由Calling函數處理。

一種方法是在調用函數中定義兩個try-except塊。但我不瞭解Calling函數如何以不同的方式處理相同類型的兩個異常。

+0

這沒有任何意義...... _why_你需要兩個'catch'塊相同的異常? – ApproachingDarknessFish

+0

**兩個相同類型的異常**,命名一些「相同類型」異常? –

+0

你將需要使用嵌套異常來完成你的事情。我個人建議你考慮一下你的問題,你可能會發現另一個解決問題的方法。 –

回答

4

這不會像廣告一樣工作;只有第一個except A條款會被執行。你需要的是裏面的一些邏輯這個子句來進一步檢查異常,或者(如果try塊內部的代碼允許)幾個try-except塊。

前一種方法的實例:

try: 
    something_that_might_fail() 
except A as e: 
    if e.is_harmless(): 
     pass 
    elif e.is_something_we_can_handle(): 
     handle_it() 
    else: 
     raise # re-raise in the hope it gets handled further up the stack