Python 常見錯誤訊息解析

Python 常見錯誤訊息(Python Error Messages)

這篇是查閱型的錯誤排解總整理:看懂 Traceback、然後對照 8 種最常見的錯誤訊息找原因與解法。建議收藏,報錯時回來查。

先學會讀 Traceback

Python 報錯時印出的一大串紅字叫 Traceback,讀法是由下往上

Traceback (most recent call last):
  File "main.py", line 5, in <module>
    result = add("1", 2)
  File "main.py", line 2, in add
    return a + b
TypeError: can only concatenate str (not "int") to str
看哪裡得到什麼
最後一行錯誤型別與原因(最重要)
倒數第二段的 File/line真正出錯的檔案與行號
再往上呼叫路徑(誰呼叫了出錯的程式)

8 種常見錯誤速查

1. SyntaxError: invalid syntax

語法寫錯:忘了冒號、括號不對稱、用了全形符號、=== 搞混。從報錯行往前一兩行也檢查——括號沒關常被算到下一行頭上。(詳見基本語法

2. IndentationError: unexpected indent

縮排不一致。統一用 4 個空格,別混用 Tab。變形版 TabError 就是混用的鐵證。

3. NameError: name ‘x’ is not defined

變數或函式名不存在:拼錯字、定義在使用之後、或忘了 import。先檢查拼字(大小寫敏感)。

4. TypeError

型別不符的操作,常見三種:

"分數" + 90          # 字串接數字 → 用 f-string
len(123)             # 對 int 取長度 → 先 str(123)
"abc"[0] = "x"       # 改不可變型別 → 字串不能就地修改

5. ValueError: invalid literal for int()

值的「內容」不對:int("abc")int("3.14")。來自 input() 的值先驗證或用 try except 包起來。

6. IndexError / KeyError

容器取值失敗的兄弟檔:List 索引超界是 IndexError,Dictionary key 不存在是 KeyError。前者檢查 len(),後者改用 get() 或先 in 檢查。

7. ModuleNotFoundError: No module named ‘xxx’

模組找不到:拼錯名、第三方套件沒安裝(uv add 補裝)、自己的檔名跟模組撞名、或用錯虛擬環境(記得用 uv run 執行)。(詳見模組與套件

8. AttributeError: ‘x’ object has no attribute ‘y’

對不對的型別呼叫不存在的方法,例如 list 用了字串的方法 "".join 寫成 [].join。特別常見的變形:'NoneType' object has no attribute ...——代表某個函式回傳了 None(忘了 return,或 sort() 這類原地修改的方法回傳 None)你還拿去用。

除錯三步驟

  1. 讀最後一行:錯誤型別 + 訊息,九成情況已說明原因
  2. 跳到行號:對照上表檢查該行(與前一兩行)
  3. 印出來看:還是不懂就在出錯行前 print() 相關變數與 type(),九成九的 bug 是「變數內容跟你以為的不一樣」

總結

Traceback 由下往上讀、最後一行最重要;八大錯誤對照表建議加入書籤,報錯時回來查。每個錯誤的細節在系列各篇都有完整說明(見內文連結)。第三階段到此完成,下一階段進入物件導向:類別與物件。

延伸閱讀