App下載

零基礎(chǔ) Python 調(diào)試教程

編程獅(w3cschool.cn) 2025-07-17 15:30:52 瀏覽數(shù) (126)
反饋

一、為什么要學(xué)調(diào)試?一句話說明白

寫程序 = 搭積木;調(diào)試 = 找積木里哪塊放歪了。
學(xué)會(huì)調(diào)試,你就能把“報(bào)錯(cuò)”翻譯成“解決方案”,而不是“玄學(xué)”。

二、常用的 4 大調(diào)試工具(附代碼示例)

工具 說明 何時(shí)用 編程獅示例
Traceback(報(bào)錯(cuò)堆棧) 錯(cuò)誤 GPS,告訴你哪行炸了 運(yùn)行直接報(bào)錯(cuò) 見下方【實(shí)戰(zhàn) 1】
print() 打印 在代碼里插“監(jiān)控?cái)z像頭” 變量值看不見 見下方【實(shí)戰(zhàn) 2】
斷點(diǎn) breakpoint() 讓程序暫停,逐行體檢 邏輯復(fù)雜不知哪一步出錯(cuò) 見下方【實(shí)戰(zhàn) 3】
單元測試 寫“小考題”防止舊病復(fù)發(fā) 改代碼后擔(dān)心崩 見下方【實(shí)戰(zhàn) 4】

三、實(shí)戰(zhàn) 1:3 步看懂 Traceback(以 NameError 為例)

編程獅在線Python3編輯器 輸入:

print(貓咪)          # 故意寫錯(cuò):變量未定義

運(yùn)行后得到:

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 行出錯(cuò)
  • NameError → 錯(cuò)誤類型:名字未聲明
  • name '貓咪' is not defined → 解釋器找不到“貓咪”是誰
    修復(fù)
    貓咪 = "橘貓"
    print(貓咪)          # 輸出:橘貓

四、實(shí)戰(zhàn) 2:用 print() 追蹤變量

需求:統(tǒng)計(jì)一段中文文本里有多少個(gè)“快樂”。

text = "我今天很快樂!因?yàn)閷W(xué)習(xí)編程很快樂~"
words = text.split(",")     # 錯(cuò)誤:按逗號切,會(huì)把句子切碎
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 切錯(cuò),修復(fù)

words = text.replace("!", "").replace("~", "").split()  # 更穩(wěn)妥

五、實(shí)戰(zhàn) 3:一行代碼加斷點(diǎn),像看電影一樣慢放程序

編程獅在線Python3編輯器Trae 里,給可疑行加:

breakpoint()        # Python 3.7+ 內(nèi)置

示例(文件 fruit.py):

def 首字母大寫(水果們):
    結(jié)果 = []
    for f in 水果們:
        breakpoint()   # 程序會(huì)在這里停
        結(jié)果.append(f.capitalize())
    return 結(jié)果


print(首字母大寫(["apple", "banana", 123]))

運(yùn)行后進(jìn)入交互模式,輸入:

  • p f 查看當(dāng)前變量
  • c 繼續(xù)運(yùn)行
    這樣就能發(fā)現(xiàn) 123 不是字符串導(dǎo)致崩潰。

六、實(shí)戰(zhàn) 4:寫單元測試,讓 bug 永不復(fù)現(xiàn)

編程獅在線Python3編輯器 輸入:

from fruit import 首字母大寫

 
def test_正常字符串():
    assert 首字母大寫(["apple"]) == ["Apple"]

 
def test_數(shù)字會(huì)被跳過():
    assert 首字母大寫(["apple", 123]) == ["Apple", ""]

 
if __name__ == "__main__":
    test_正常字符串()
    test_數(shù)字會(huì)被跳過()
    print("? 全部測試通過!")

運(yùn)行后若斷言失敗,會(huì)精準(zhǔn)提示哪條測試掛了,引導(dǎo)你修復(fù)源碼

七、高頻報(bào)錯(cuò)對照表(收藏版)

英文報(bào)錯(cuò) 中文翻譯 最常見原因 1 行修復(fù)示例
SyntaxError: invalid syntax 語法錯(cuò)誤 少冒號/括號 if x == 1:
IndentationError 縮進(jìn)錯(cuò)誤 Tab 與空格混用 統(tǒng)一用 4 空格
TypeError: can only concatenate str (not "int") to str 類型錯(cuò)誤 字符串+數(shù)字 str(num) + "歲"
ModuleNotFoundError 模塊不存在 沒裝庫 pip install 包名

八、3 分鐘速通調(diào)試流程圖

graph TD
    A[運(yùn)行報(bào)錯(cuò)] --> B{看 Traceback}
    B -->|定位行號| C[加 print/breakpoint]
    C --> D[修改變量/邏輯]
    D --> E[寫測試防復(fù)發(fā)]
    E --> F[提交代碼]

點(diǎn)擊查看Mermaid流程圖

九、課程推薦

想要系統(tǒng)學(xué)習(xí)Python請點(diǎn)擊《Python零基礎(chǔ)到高薪就業(yè)

1 人點(diǎn)贊