2016-04-25 38 views
2

我的項目的代碼是完全一樣以下模塊:我可以改變「提高」或「例外」的行爲嗎?

try: 
    execute_some_code() 
except Exception: 
    print(datetime.datetime.now()) 
    raise 

僅僅是因爲,如果我得到一個錯誤信息,我想知道什麼時候發生。我覺得反覆重複這些代碼非常愚蠢,我想把它分開。

我不想裝飾execute_some_code的東西,這樣做的錯誤捕獲(因爲有時它只是一個代碼塊,而不是一個函數調用,有時我不需要完全相同的功能來裝飾,就像那樣)。我也不希望將stdout轉移到記錄所有內容的其他流,因爲這會影響其他所有發送到stdout的內容。

理想情況下,我希望覆蓋raise語句(在每次執行時也打印datetime.datetime.now())或Exception類的行爲,以預先將所有消息與時間掛起。我可以很容易地從Exception中進行分類,但是之後我必須確保我的函數能夠引發這個子類的一個實例,並且我會有與當前一樣多的代碼重複。

這些選項可能有哪些?

+0

正在使用調試器一個選項嗎? – xuhdev

+0

我正在寫'sys.excepthook',但@IljaEverilä打倒我找到了這個謎。 – Boldewyn

回答

0

您可能能夠修改蟒蛇(我不得不讀代碼,以確定如何複雜,會是),但:

你做希望與不同的行爲來取代raise - 嘗試捕捉是解決問題的一種非常pythonic的方法,所以有很多代碼可以很好地工作,例如調用一個方法並讓該方法引發異常,在正常情況下捕獲該異常。所以我們可以將這種方法排除在外 - 你只是想知道你關心的例外情況,而不是那些在運行中正常的情況。

這同樣適用於觸發每當創建一個實例Exception一些動作 - 但是:

您可能能夠覆蓋全局命名空間;至少對於你申報自己的Exception類後得到初始化的東西。然後,您可以添加包含時間戳的message屬性。但是,不要這樣做 - 可能有人真的依賴這個消息來自動地對異常做出反應(糟糕的風格,但仍然不是很少,可悲)。

相關問題