文章

Python-(補充)基本Debug—程式寫錯沒關係!簡單小技巧教你找問題

零、前言

新手最容易感到煩躁的,大概就是程式好不容易寫完,啟動後卻跑出一堆紅字錯誤,但又不知道該怎麼辦、從何改起。實務上這在日常的開發中是非常正常的事情,業餘跟專業程式設計師,面對這件事情時,差異其實只是,專業的程式設計師可以比較有效率知道:

  1. 主要錯誤出現在哪邊
  2. 錯誤的類型是什麼
  3. 錯誤發生的情況

一、錯誤訊息判讀

當你在撰寫程式碼並執行時,如果遇到錯誤,Python 會在終端機或 IDE(例如:VS Code、PyCharm 這種稱為「整合開發環境」(IDE))中顯示錯誤訊息 (如下圖)。

錯誤訊息範例 錯誤訊息範例

我們現在用上面的例子來說明,這些錯誤訊息雖然看起來複雜,但只要稍微了解它的結構,便可以有效地幫助你找出問題所在。以下是一些重要的訊息解析技巧:

  1. 錯誤類型 (Error Type)

    當程式出現錯誤時,Python 會在訊息的第一行告訴你錯誤的類型。例如,SyntaxError 表示語法錯誤,NameError 則表示你使用了一個未定義的變數 (如上圖)。了解這些錯誤類型的意義,可以幫助你更快地找到問題。

  2. 錯誤位置 (Traceback)

    Traceback 是錯誤訊息中的一部分,會顯示程式中哪一行出現了錯誤。通常 Traceback 會從下到上顯示錯誤的發生順序,最上面的部分是最早出現錯誤的地方,從上圖可以看到,他顯示錯誤的行數是在第 1 行 print(test) 處。

  3. 錯誤訊息 (Error Message)

    錯誤訊息通常會跟在錯誤類型後面,提供更詳細的資訊。例如,如果你看到 IndexError: list index out of range,表示你在嘗試存取一個超出清單範圍的索引值。而這邊的錯誤訊息為 NameError: name 'test' is not defined 代表我們沒有定義 test 這個變數而導致錯誤發生。

我們再來看一個範例,假設你寫了以下的程式碼:

1
2
numbers = [1, 2, 3]
print(numbers[3])

執行後錯誤訊息如下:

Untitled

  • 這裡的 IndexError 表示你在存取清單時出現了錯誤,錯誤訊息 list index out of range 則明確告訴你,索引值超出了清單的範圍,因為 numbers 只存 3 個值,最多只能索引到 number[2] (List index 是從 0 開始算)。

當然實務上我們程式碼會有很多行,錯誤訊息不一定可以如例子這麼明顯看出來,但原則都不變,只要掌握好這 3 種查找的內容,基本上就可以幫助讀者更快速縮小範圍,抓到錯誤的源頭,重點是,要有耐心~

二、錯誤種類查找

在了解了錯誤訊息之後,下一步就是了解錯誤的種類及其成因。

以下介紹幾種常見的錯誤類型,並附上解決方法:

  1. SyntaxError(語法錯誤) 這類錯誤通常發生在你輸入的程式碼不符合 Python 的語法規則。例如,漏掉括號或是寫錯了關鍵字。

    1
    2
    
     if x = 10:  # 這行會產生 SyntaxError,因為應該使用 '==' 而非 '='
         pass
    
  2. NameError(名稱錯誤) 這類錯誤表示你在使用一個變數或函式時,Python 找不到這個名稱。

    1
    
     print(my_variable)  # 如果 my_variable 尚未定義,則會產生 NameError
    
  3. TypeError(類型錯誤) 當你嘗試將不兼容的類型結合在一起時,就會出現 TypeError。

    1
    
     result = 'string' + 5  # 這行會產生 TypeError,因為不能將「字串」和「數字」相加
    
  4. IndexError(索引錯誤) 如前面的範例所示,這類錯誤發生在我們嘗試存取一個超出範圍的清單或序列的索引時。 解決方法:檢查清單或序列的長度,並確保索引值在範圍內。

更多錯誤類型,可以瀏覽此網站,裡面有更多詳盡的整理:

Error Types in Python

三、結語

當初次接觸 Python 程式設計時,遇到錯誤在所難免,又或者說,這才是日常。

但重要的是,不要因為錯誤而氣餒,反而應該將它們視為學習的機會,每次錯誤都是一個讓你更深入理解程式語言運作原理的機會。

在撰寫程式的過程中,善用錯誤訊息來幫助自己找出問題,並養成良好的程式除錯習慣。隨著經驗的累積,會越來越能夠快速地辨識並修正錯誤,逐漸成為一個更成熟的程式設計師。記住,程式寫錯是正常的,重要的是如何應對這些錯誤,並從中學習成長。

本文章以 CC BY 4.0 授權