[python筆記] 11.python常見的錯誤訊息

前言:

不知道有些人會不會跟我以前一樣,對電腦有一些恐懼,害怕在操作電腦的時候,突然跳出了類似故障的訊息,這種時候總會讓人擔心電腦怎麼了?但經過不斷的對電腦的了解,漸漸地知道這些訊息並不一定是故障,有時候只是一些提醒,又或是告訴你哪裡因為什麼原因無法執行。

python 的錯誤訊息也是同樣的道理,理解錯誤訊息想要表達的內容,可以快速的幫助找到錯誤,也能透過錯誤更好的學習 python 的運作。接著就來介紹一些常見的錯誤類型。

閱讀時間:5 分鐘

常見的錯誤

如同在[筆記]學習一個新程式語言的過程(下)裡面提到的四種錯誤,所以就不多說,直接演示 python 如何造成這些錯誤吧。

# 	Syntax Errors:語法錯誤(少了:)
if True
    print("true")

##########################
# 	ZeroDivisionError:除以0錯誤
a=8/0

##########################
# 	NameError:使用了未宣告的變數名稱
if a!=b:
    print("true")

##########################
# 	TypeError:發生資料與資料型別不符
a=5+"2"

與型別有關的錯誤

ValueError
當有明確的資料型態,但資料卻與型態不符的情況時觸發。

int("hello")

AttributeError
發生在物件使用了未被定義的方法或屬性。例如:

a=10
a.add(10)

IndexError
發生在串列(序列型態以及字串)上,欲操作超過最大 index (不存在)的元素

a=[0,1,2]
print(a[3])

KeyError
發生在字典不存在指定的 key。

dic_N_phone_code={"台北":"02", "基隆":"02", "桃園":"03", "新竹":"03", "宜蘭":"03"}
print(dic_N_phone_code["高雄"]) # 發生錯誤

其他錯誤

IndentationError
當縮牌沒有對齊的時候觸發。

if True:
    print("y")
     print("yy")

錯誤的處理

如果已經知道錯誤可能發生,或是一定發生,卻又沒辦法透過程式來處理的情況,例如:錯誤原因來自於使用者的輸入,而不是開發人員。在這種情況就可以使用 except。except 通常與 try 並用,形成 try… except… 的架構。我們直接看程式:

try:
    a=int(input("輸入整數"))
    print(a-a)
except:
    print("有錯誤發生")

#############################
# 我們可以預先判斷錯誤可能是輸入非數字,無法轉成整數,也就是ValueError,那就可以只針對該錯誤類型來創造例外
try:
    a=int(input("輸入整數"))
    print(a-a)
except ValueError:
    print("有錯誤發生")

為什麼要指定錯誤類型呢?
因為有時候已知觸發的錯誤類型不同,那麼就可以針對不同的錯誤給予不同的例外處理。同時指定了錯誤類型也可以減少 except 在執行過程的負擔。

結語

剛開始學習 python 可以不必去想可能會發生什麼錯誤,而去苦惱要不要加 try… except… 語法,然後陷入哪個地方要加,哪個地方不用加的無限迴圈。沒有人一開始就能夠知道所有的可能性,也沒有人有辦法在一開始就知道哪裡要去抓錯、除錯,很多時候都是經驗的累積,或是寫好程式後進行測試時,才會知道的。
永遠記得身為新手擁有犯錯的權利,所以必要的,就是努力犯錯並且糾正自己。

這系列的筆記,就快要贏來尾聲了,有關 python 的內容,剩下兩個部分:function 與 module。

This article was written by 洋洋. Any similarities to other works are purely coincidental.

我們是 Be Good Tool
團隊由幾位工程師、設計師與PM組成
專注開發各種免費網站工具和推廣優質的APP
歡迎到我們的線上工具列表看看喔!