我有幾種方法可以引發我的自定義異常。在引發異常之後,我需要處理它,讓我們說日誌消息到控制檯並保存到數據庫中。在引發的異常中執行自定義代碼
我正在考慮在帖子標題中描述的一個瘋狂的解決方法 - 我可以將自定義代碼與日誌記錄和DB保存到__init__
我的自定義異常的方法,所以每次引發異常,我只是沉默它,因爲所有需要的東西都會在異常初始化時完成。
我所知道的是,除了__init__
本身也提出了另一個例外,但可以過處理:)
有沒有人試過?
爲什麼它是瘋狂的想法? :)
-
編輯:
我知道這有點瘋狂,我只是好奇你的意見的。我將嘗試附上我想要實現的內容:
我正在使用遠程數據,並且在通過網絡與其他服務器通信時,可能會出現一些問題,每個人都在其他某個地方: 1.網絡錯誤 - 啓用創建連接。 2. HTTP錯誤(404,500等) - 連接後; 3.遠程服務器可以返回一些其他錯誤太
由於這些問題發生在幾個不同的地方,我創建了自定義異常:
class CustomException(Exception):
pass
到處提高了,我什麼時候才能趕上他們,例如:
try:
conn.open(url)
except HTTPException as e:
raise CustomException('http')
這只是一個僞示例。
這CustomException被逮住somewher更高,幾乎在每一個地方,我處理這個同樣的方式,即:
try:
place.populate()
except CustomException as e:
handle_exception(e)
return False
而且handle_exception
保存有關問題的數據庫信息,做其他的事情也想節省place
的對象狀態和acccess日期,但始終更新相同的東西。
所以我只是想知道如果把handle_exception
代碼放在__init__
之內會是一個非常瘋狂的想法,因爲每當出現異常時都會這樣做。
感謝您的意見!
你有沒有一個例子。你失去了我...... – RickyA
你可以在自定義異常的__init__內部進行日誌記錄和DB保存。但我不認爲這是我們應該這樣做的方式。通常在一個大項目中寫這樣的代碼會讓你自己和其他工作的人無法讀取代碼。 –
你爲什麼要將異常處理打包到異常對象中?如果你想觸發一些日誌記錄,只需觸發一些日誌記錄而不會出現異常。例外情況應該用於「特殊」情況。如果你不把它看作是一個例外,那麼沒有理由讓它成爲例外。 –