當您看到這樣的訊息時:
TypeError: exceptions must derive from BaseException
可能會很困惑究竟是什麼原因導致這樣的錯誤發生, 那本章節將會告訴您以下:
主要的原因是因為我們在往上拋出錯誤的時候並未使用自訂的錯誤類別並繼承至BaseException, 舉個例子來說, 我們可能會具有一個判斷式在判斷變數a不是偶數時, 拋出「❌ 這不是偶數」的錯誤訊息。
a = 9
if a % 2 != 0:
raise '❌ 這不是偶數'
執行後會顯示這樣的錯誤訊息。
Traceback (most recent call last):
File "/precut/test.py", line 4, in <module>
raise '❌ 這不是偶數'
^^^^^^^^^^^^^^^
TypeError: exceptions must derive from BaseException
主要是「raise」後面必須要接上自訂或者內建的錯誤類別( 📄 詳細請看這裡…), 因此我們也需要這麼做。
那依據我們上述的錯誤可歸於內建的錯誤型別「AssertionError」, 因此我們可以這樣做:
a = 9
if a % 2 != 0:
raise AssertionError('❌ 這不是偶數')
這些內建的錯誤類別請看這裡「📄 Exception hierarchy」。
除了內建的錯誤類別, 我們還可以…
class CustomError(BaseException):
def __init__(self, message):
self.message = message
通常不建議, 因為這種類型的錯誤太過於廣泛了, 應該從內建的錯誤類別中拋出, 或者針對於特定應用場景訂製專屬的錯誤類別, 這樣會讓錯誤更容易被識別出來。
總結來說, raise拋出來的必須是「內建的錯誤類別」或者是「自訂的錯誤類別」,那關於Python的錯誤處理機制歡迎來「【🔒 Python 先修班】🆘 正確的處理例外錯誤(Try…Except…), 讓我們降低例外的錯誤因子」, 這邊會教您如何正確的進行錯誤處理。
學習軟體開發的路上常常苦於網路資訊爆炸嗎? 教學何其多,但卻遇到無法明確選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您業界開發重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。