2015-10-13 20 views
1

在我當前的項目中,我使用RPC(遠程過程調用)的簡單請求/回覆形式進行模塊通信。我希望自動重試失敗的請求,當且僅當有新的嘗試可能成功的機會。標準Python異常對瞬態和永久性錯誤有任何分類嗎?

絕大多數錯誤是永久性的,但超時和I/O錯誤等錯誤不是。

我已經定義了兩個自定義異常 - RPCTransientError和RPCPermanentError - 並且當前我將所有錯誤映射到這兩個異常中的一個。如果有疑問,我選擇暫時的。

我不想重新發明輪子。我的問題是:是否有任何關於短暫性和永久性錯誤的標準例外分類的資源?

我使用Python 3.3+與新的操作系統和IO相關的異常層次結構,我喜歡很多。 (PEP 3151)。不關心以前的版本。

回答

0

不,不是因爲一個簡單的原因,可能會出現錯誤,而對於其他人,根據使用情況,可能會被視爲永久性錯誤。

如果有疑問,我選擇暫時的。

如果即使您不能確定您設計的軟件中的錯誤,那麼如何才能使此選擇具有普遍性?

一種方法是隻處理最基本的子類。你說你想重試IO錯誤和超時;由於Python 3.3,IOError和一些其他例外如socket.error已合併到OSError。所以,你可以簡單地檢查OSError,它將適用於那些和許多其他子像TimeoutErrorConnectionErrorFileNotFoundError ...

你可以看到OSError.__subclasses__()受影響的類。嘗試一個python shell(遞歸地做這個來找到所有的)。