7

在使用異常來表示錯誤的語言中,我想調用一些第三方代碼,如果失敗,請運行後備代碼。例如:如何在異常情況下穩健地調用第三方代碼?

try: 
    result = third_party.fast_calculation() 
catch: 
    result = slower_calculation() 

以我的經驗,這是非常罕見的都知道,可以通過第三方的代碼拋出的異常的。因此,我無法在catch條款中列出這些例外情況。另一方面,我經常建議不要每一個可能的例外catch

在這種情況下,我應該如何編寫catch條款?

回答

1

只有當您有特定的方式來處理它們時,才應該捕獲特定的異常類型。您可以(也應該)按照最合適的順序捕捉儘可能多的特定類型的異常。

如果你只是想以同樣的方式處理每一個異常,我相信你目前的無類型捕獲是一樣好。真正的問題是IMO,當你留下一個空的捕獲時,因爲客戶端代碼不知道該函數是否真的做了它應該做的事情。

0

首先,檢查你的第三方代碼實際上是否拋出異常。它可能不會。

其次,如果沒有第三方代碼拋出異常,請檢查返回的結果。可以返回狀態值以指示是否實現了成功的結果。如果是,則可能需要進行狀態檢查以確定在不良返回狀態之後是否需要恢復操作(例如,使用「較慢計算」方法)。

相關問題