8
之間的區別:是什麼就是什麼這兩個之間的區別,除了與除BaseException
except:
# do something
和
except BaseException as be:
print(be)
我的意思是在第一種情況下所有可能的例外是抓住了,但就是這第二個是真的嗎?
也可以將錯誤消息要使用的第一種情況下打印?
之間的區別:是什麼就是什麼這兩個之間的區別,除了與除BaseException
except:
# do something
和
except BaseException as be:
print(be)
我的意思是在第一種情況下所有可能的例外是抓住了,但就是這第二個是真的嗎?
也可以將錯誤消息要使用的第一種情況下打印?
實事求是地講,有except:
和except BaseException:
沒有什麼區別,任何當前的Python版本。
那是因爲你不能提出任何類型的對象作爲一個例外。 raise
statement明確禁止引發任何其他內容:
raise將第一個表達式計算爲異常對象。 它必須是子類或
BaseException
的實例。
大膽強調我的。但是,情況並非總是如此,在較老的Python版本(2.4和更早版本)中,您可以使用字符串作爲例外。
的優點則是,你可以很方便地訪問捕獲的異常。 爲了能夠添加as targetname
,您的必須捕獲特定類別的例外,並且只有BaseException
即將這樣做。
您仍然可以通過使用sys.exc_info()
雖然訪問當前激活的異常:
except:
be = sys.ext_info()[1]
選擇你覺得什麼是你的未來的自己和你的同事更具有可讀性。
除非你還沒有把像'BaseException = ValueError'前;-)'除了:'保證總是除了任何錯誤。 –
@a_guest:是的,*名稱*仍然可以被反彈。 'builtins.BaseException'是一個不錯的回退,但並非萬無一失。 –