2016-04-20 24 views
1
try: 
    raise KeyError() 
except KeyError: 
    print "Caught KeyError" 
    raise Exception() 
except Exception: 
    print "Caught Exception" 

正如預期的那樣多,5日線最終except Exception子句中沒有被捕獲提高Exception()。爲了在捕捉except KeyError塊內的例外,我必須添加另一try...except這樣,複製最終except Exception邏輯:Python的try /除與除塊

try: 
    raise KeyError() 
except KeyError: 
    print "Caught KeyError" 
    try: 
     raise Exception() 
    except Exception: 
     print "Caught Exception" 
except Exception: 
    print "Caught Exception" 

在Python,是有可能執行流傳遞到最終except Exception像我想要做的那樣阻止?如果沒有,是否有減少邏輯重複的策略?

+2

是。把你用來處理'Exception'的代碼放在一個函數中。然後在這兩個地方調用該函數。 – kindall

+0

'except'子句只捕捉'try'中拋出的錯誤;否則,如果你想要的話,你不能重新加註。 – jonrsharpe

+1

嗯,你能解釋你想達到什麼嗎?標準的方法來重新提出一個你已經決定在「提升」之後決定不處理的捕捉異常,而沒有其他任何東西。在這種情況下,這可能符合或不符合你的要求。無法單獨從您的代碼中分辨出來。 –

回答

4

您可以添加try嵌套的另一個層面:

try: 
    try: 
     raise KeyError() 
    except KeyError: 
     print "Caught KeyError" 
     raise Exception() 
except Exception: 
    print "Caught Exception"