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)你還拿去用。
除錯三步驟
- 讀最後一行:錯誤型別 + 訊息,九成情況已說明原因
- 跳到行號:對照上表檢查該行(與前一兩行)
- 印出來看:還是不懂就在出錯行前
print()相關變數與type(),九成九的 bug 是「變數內容跟你以為的不一樣」
總結
Traceback 由下往上讀、最後一行最重要;八大錯誤對照表建議加入書籤,報錯時回來查。每個錯誤的細節在系列各篇都有完整說明(見內文連結)。第三階段到此完成,下一階段進入物件導向:類別與物件。