2017-06-20 90 views

回答

9

實事求是地講,有except:except BaseException:沒有什麼區別,任何當前的Python版本。

那是因爲你不能提出任何類型的對象作爲一個例外。 raise statement明確禁止引發任何其他內容:

raise將第一個表達式計算爲異常對象。 它必須是子類或BaseException的實例。

大膽強調我的。但是,情況並非總是如此,在較老的Python版本(2.4和更早版本)中,您可以使用字符串作爲例外。

的優點則是,你可以很方便地訪問捕獲的異常。 爲了能夠添加as targetname,您的必須捕獲特定類別的例外,並且只有BaseException即將這樣做。

您仍然可以通過使用sys.exc_info()雖然訪問當前激活的異常:

except: 
    be = sys.ext_info()[1] 

選擇你覺得什麼是你的未來的自己和你的同事更具有可讀性。

+2

除非你還沒有把像'BaseException = ValueError'前;-)'除了:'保證總是除了任何錯誤。 –

+1

@a_guest:是的,*名稱*仍然可以被反彈。 'builtins.BaseException'是一個不錯的回退,但並非萬無一失。 –

相關問題