2016-11-23 155 views
0

我寫了下面的代碼:蟒蛇處理多例外

try: 
    do_somethong 
except TimedOutException as e: 
    logger.exception(e) 
except Exception as e: 
    logger.exception(e) 

是這同下面的代碼?

try: 
    do_somethong 
except (TimedOutException, Exception) as e: 
    logger.exception(e) 

我知道TimedOutExceptionException子類,我應該刪除TimedOutException?任何人都可以爲我解釋?提前致謝!

回答

1

警告:except Exception as e:不應該被使用,因爲它團體每一個從它inhetirts異常(最例外的從Exception繼承除了一對夫婦蟒蛇相關的)

如果仍想使用異常,TimedOutException不會是必需的。

在處理異常時,每個異常都是except子句中使用的類的實例或其中的任何子類的處理,因此Exception基本上可以處理99%的異常。這就是爲什麼Exception不推薦作爲這個purpouse的一個類,除非你只是記錄並再次用raise提出同樣的異常。

當使用多個except子句時,順序很重要,因爲任何異常只會由與該類型匹配的第一個except子句處理。

+0

嗯我以不同的方式解釋這個問題,但我明白你現在想說什麼。 –

+0

我會添加一些進一步的解釋,使其更清晰。 – Adirio

+0

如果我想在引發TimedOutException時重試,第一種方法更好,但是如果我只是在引發每個異常時打印錯誤消息,我可以使用'Exception Exception',不需要添加'TimedOutException' , 是對的? – pangpang

1

except塊使用,如果要應用不同的處理:如果應用相同的處理組在同一區塊所有的異常

try: 
    do_somethong 
except TimedOutException as e: 
    # special processing for timeout 
    logger.exception(e) 
except Exception as e: 
    # different processing for all other exception 
    logger.exception(e) 
    exit(1) # say it is fatal for example... 

,並且不添加的類別已經存在異常的子類。