一、為什么要學(xué)調(diào)試?一句話說明白
寫程序 = 搭積木;調(diào)試 = 找積木里哪塊放歪了。
學(xué)會調(diào)試,你就能把“報錯”翻譯成“解決方案”,而不是“玄學(xué)”。
二、常用的 4 大調(diào)試工具(附代碼示例)
工具 | 說明 | 何時用 | 編程獅示例 |
---|---|---|---|
Traceback(報錯堆棧) | 錯誤 GPS,告訴你哪行炸了 | 運行直接報錯 | 見下方【實戰(zhàn) 1】 |
print() 打印 |
在代碼里插“監(jiān)控攝像頭” | 變量值看不見 | 見下方【實戰(zhàn) 2】 |
斷點 breakpoint() | 讓程序暫停,逐行體檢 | 邏輯復(fù)雜不知哪一步出錯 | 見下方【實戰(zhàn) 3】 |
單元測試 | 寫“小考題”防止舊病復(fù)發(fā) | 改代碼后擔(dān)心崩 | 見下方【實戰(zhàn) 4】 |
三、實戰(zhàn) 1:3 步看懂 Traceback(以 NameError 為例)
在 編程獅在線Python3編輯器 輸入:
print(貓咪) # 故意寫錯:變量未定義
運行后得到:
Traceback (most recent call last):
File "/tmp/cat.py", line 1, in <module>
print(貓咪)
NameError: name '貓咪' is not defined
逐行翻譯:
- File "/tmp/cat.py", line 1 → 第 1 行出錯
- NameError → 錯誤類型:名字未聲明
- name '貓咪' is not defined → 解釋器找不到“貓咪”是誰
修復(fù):貓咪 = "橘貓" print(貓咪) # 輸出:橘貓
四、實戰(zhàn) 2:用 print()
追蹤變量
需求:統(tǒng)計一段中文文本里有多少個“快樂”。
text = "我今天很快樂!因為學(xué)習(xí)編程很快樂~"
words = text.split(",") # 錯誤:按逗號切,會把句子切碎
print("調(diào)試:當(dāng)前 words 列表 =", words) # 插監(jiān)控
count = 0
for w in words:
count += w.count("快樂")
print("調(diào)試:最終 count =", count)
通過打印發(fā)現(xiàn) words
切錯,修復(fù):
words = text.replace("!", "").replace("~", "").split() # 更穩(wěn)妥
五、實戰(zhàn) 3:一行代碼加斷點,像看電影一樣慢放程序
在 編程獅在線Python3編輯器 或 Trae 里,給可疑行加:
breakpoint() # Python 3.7+ 內(nèi)置
示例(文件 fruit.py
):
def 首字母大寫(水果們):
結(jié)果 = []
for f in 水果們:
breakpoint() # 程序會在這里停
結(jié)果.append(f.capitalize())
return 結(jié)果
print(首字母大寫(["apple", "banana", 123]))
運行后進入交互模式,輸入:
p f
查看當(dāng)前變量c
繼續(xù)運行
這樣就能發(fā)現(xiàn)123
不是字符串導(dǎo)致崩潰。
六、實戰(zhàn) 4:寫單元測試,讓 bug 永不復(fù)現(xiàn)
在 編程獅在線Python3編輯器 輸入:
from fruit import 首字母大寫
def test_正常字符串():
assert 首字母大寫(["apple"]) == ["Apple"]
def test_數(shù)字會被跳過():
assert 首字母大寫(["apple", 123]) == ["Apple", ""]
if __name__ == "__main__":
test_正常字符串()
test_數(shù)字會被跳過()
print("? 全部測試通過!")
運行后若斷言失敗,會精準(zhǔn)提示哪條測試掛了,引導(dǎo)你修復(fù)源碼。
七、高頻報錯對照表(收藏版)
英文報錯 | 中文翻譯 | 最常見原因 | 1 行修復(fù)示例 |
---|---|---|---|
SyntaxError: invalid syntax |
語法錯誤 | 少冒號/括號 | if x == 1: |
IndentationError |
縮進錯誤 | Tab 與空格混用 | 統(tǒng)一用 4 空格 |
TypeError: can only concatenate str (not "int") to str |
類型錯誤 | 字符串+數(shù)字 | str(num) + "歲" |
ModuleNotFoundError |
模塊不存在 | 沒裝庫 | pip install 包名 |
八、3 分鐘速通調(diào)試流程圖
graph TD
A[運行報錯] --> B{看 Traceback}
B -->|定位行號| C[加 print/breakpoint]
C --> D[修改變量/邏輯]
D --> E[寫測試防復(fù)發(fā)]
E --> F[提交代碼]
點擊查看Mermaid流程圖
九、課程推薦
想要系統(tǒng)學(xué)習(xí)Python請點擊《Python零基礎(chǔ)到高薪就業(yè)》