用 AI 除錯的正確流程
程式出錯時,只丟一句「跑不動」給 AI,常常越修越亂。這堂課教你一套穩定的除錯流程:重現、收集線索、問原因、一次改一處、再執行。
寫程式一定會遇到錯誤,這不代表你不會寫,連資深工程師每天也在除錯。差別在於:有經驗的人有一套固定的流程,不會亂槍打鳥。
有了 AI 之後,很多人的除錯方式變成「把錯誤丟給 AI、把它給的程式貼回去、又錯、再丟……」。運氣好時兩三輪就解決;運氣不好時,程式被改得面目全非,原本好的地方也壞了。
上一堂你練習了請 AI 解釋程式,這一堂會用上同樣的能力:先弄懂「為什麼錯」,再動手改。我們要建立一套有方向的除錯流程,讓 AI 成為你的偵探助手,而不是亂改一通的維修工。
第 1 步:先確認問題能重現
「重現」的意思是:你知道怎麼做會讓錯誤出現,而且每次都會出現。
- 是一執行就錯,還是輸入某些資料才錯?
- 是每次都錯,還是偶爾錯?
例如匯率換算腳本,你發現輸入 100 沒問題,輸入 1,000(有逗號)就當掉。這就是很重要的線索,比「有時候會壞掉」有用太多了。
第 2 步:收集完整線索
Python 出錯時,會印出一大段叫做 Traceback 的錯誤訊息,它是程式留給你的「事故報告」。很多初學者看到一長串紅字就慌了,其實它很有規律:由下往上讀。
看不懂沒關係,但請整段複製給 AI,不要自己挑一行。
問 AI 時,要附上這三樣東西:
| 線索 | 為什麼需要 |
|---|---|
| 完整的錯誤訊息 | 只貼最後一行,AI 不知道是在哪裡出錯 |
| 相關的程式碼 | 至少包含出錯的那幾行和它呼叫的函式 |
| 你預期的結果 | 有時程式沒報錯,只是結果不對,AI 要知道「對」是什麼樣子 |
另外記得說明你做了什麼操作、輸入了什麼資料,以及執行環境(作業系統、Python 版本)。
第 3 步:先問原因,不要急著要答案
比較一下這兩種問法:
跑不動,幫我修好。
(只貼了最後一行錯誤)
我在寫一個台幣換日圓的 Python 腳本,執行環境是 Windows 11、Python 3.12。
操作:執行 python rate.py,輸入金額 300。
預期:印出約 1410 日圓。
實際:出現以下錯誤(完整訊息):
Traceback (most recent call last):
File "rate.py", line 12, in <module>
total = to_jpy(amount)
File "rate.py", line 5, in to_jpy
return twd * RATE
TypeError: can't multiply sequence by non-int of type 'float'相關程式碼:(貼上 rate.py 全部內容)
請先不要直接改程式。告訴我最可能的原因有哪些,按可能性排序,並說明我可以怎麼確認是哪一個。
「先說原因、再改」有兩個好處:第一,你會學到這類錯誤的成因,下次自己就看得出來;第二,AI 有時會猜錯原因,你可以在它動手改之前就發現。
以這個例子來說,AI 很可能會指出:input() 讀進來的是文字,不是數字,所以要先用 float() 轉換。這正是 Python 初學者最常遇到的錯誤之一。
第 4 步:一次只改一個地方
AI 常常會一口氣給你一份「全部重寫」的版本,裡面改了五六個地方。就算問題解決了,你也不知道是哪一個修改起作用,更可能悄悄引入新問題。
改之前,可以先把目前能動的版本複製一份備份。之後學到 Git,就能用更正式的方式保存每一個版本。
第 5 步:執行並確認
改完一定要實際執行,而且不只測試原本出錯的輸入,也試試原本正常的輸入,確認沒有改壞別的地方。
如果還是錯,就回到第 2 步,把新的錯誤訊息和目前的程式碼再提供一次。不要只說「還是不行」,因為錯誤訊息可能已經變了,那是很重要的新線索。
卡關時:縮小成最小範例
如果程式很長、錯誤很難找,試著把問題縮小:
- 另開一個新檔案。
- 只放重現錯誤所需的最少程式碼,例如把讀檔換成寫死的資料。
- 一直刪,刪到再刪就不會出錯為止。
這個過程常常讓你自己就發現問題所在。就算沒有,一段十行的範例也比三百行的程式更容易讓 AI 看懂。
這段程式在處理含逗號的金額時會出錯。請幫我寫一個最小可重現範例:用最少的程式碼、不讀任何檔案,只重現這個錯誤。先不要修正它。
- 寫一個匯率換算腳本,故意不把
input()的結果轉成數字,讓它出錯。 - 依照「有方向的問法」範本,把操作、預期、實際錯誤、程式碼整理好,問 Claude 或其他 AI,並要求先說明原因。
- 只套用最小修改,執行確認。
- 再試試輸入
1,000或abc,看看會發生什麼事,用同樣流程處理第二個錯誤。
讀完了嗎?
標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。
留言與討論
卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。