【💊 Python疑難雜症】TypeError: exceptions must derive from Base..

2023/09/19閱讀時間約 2 分鐘
raw-image

當您看到這樣的訊息時:

TypeError: exceptions must derive from BaseException

可能會很困惑究竟是什麼原因導致這樣的錯誤發生, 那本章節將會告訴您以下:

  • 怎麼發生的?
  • 怎麼解決?
  • 我們應該用Exception或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

🤔 我們應該用Exception或BaseException嗎?

通常不建議, 因為這種類型的錯誤太過於廣泛了, 應該從內建的錯誤類別中拋出, 或者針對於特定應用場景訂製專屬的錯誤類別, 這樣會讓錯誤更容易被識別出來。

結語

總結來說, raise拋出來的必須是「內建的錯誤類別」或者是「自訂的錯誤類別」,那關於Python的錯誤處理機制歡迎來「【🔒 Python 先修班】🆘 正確的處理例外錯誤(Try…Except…), 讓我們降低例外的錯誤因子」, 這邊會教您如何正確的進行錯誤處理。

學習軟體開發的路上常常苦於網路資訊爆炸嗎? 教學何其多,但卻遇到無法明確選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您業界開發重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。

91會員
260內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!