2010-12-07 27 views
5

如何處理Python中except語句拋出的異常?異常中的Python例外

def safeLoopingCall(self, *args, **kwargs): 
    try: 
     self.loopingCall(*args, **kwargs) 
    except: 
     self.log.exception("exception in task") 

如果在記錄器中發生異常,我們就出局了。避免這種情況的最佳做法是什麼?除了另一個try-except塊(聽起來很糟糕)嗎?這個函數應該永遠不會傳播任何異常。

+2

你使用哪種記錄器?默認的「日誌記錄」模塊會吞噬記錄期間發生的異常:http://docs.python.org/library/logging.html#exceptions-raised-during-logging – aeter 2010-12-07 16:21:53

回答

5

一般來說,除了塊以外,不是一個好的設計,因爲它可以屏蔽編程錯誤。恕我直言,這就是爲什麼它看起來有點可怕。

如果你真的想要失敗,無論如何,那麼是的,把一個嵌套的嘗試裏面的except子句 - 但記錄完整的追溯,否則它可以很難調試。

0

FWIW,你可以看看我的CausedException class。在這種情況下它可以幫助你;你將不得不捕獲這兩個異常,將它們包裝到CausedException中,然後應該以這兩個異常爲由引發CausedException。這樣,所有涉及的堆棧跟蹤都將在調試消息中可用。