所有入門單元免費開放 · 課程內容持續更新中

用 AI 除錯的正確流程

程式出錯時,只丟一句「跑不動」給 AI,常常越修越亂。這堂課教你一套穩定的除錯流程:重現、收集線索、問原因、一次改一處、再執行。

第 4.4 堂約 14 分鐘

寫程式一定會遇到錯誤,這不代表你不會寫,連資深工程師每天也在除錯。差別在於:有經驗的人有一套固定的流程,不會亂槍打鳥。

有了 AI 之後,很多人的除錯方式變成「把錯誤丟給 AI、把它給的程式貼回去、又錯、再丟……」。運氣好時兩三輪就解決;運氣不好時,程式被改得面目全非,原本好的地方也壞了。

上一堂你練習了請 AI 解釋程式,這一堂會用上同樣的能力:先弄懂「為什麼錯」,再動手改。我們要建立一套有方向的除錯流程,讓 AI 成為你的偵探助手,而不是亂改一通的維修工。

除錯五步循環:重現問題、收集線索、問 AI、只改一處、再執行;還有錯就回到收集線索

第 1 步:先確認問題能重現

「重現」的意思是:你知道怎麼做會讓錯誤出現,而且每次都會出現。

  • 是一執行就錯,還是輸入某些資料才錯?
  • 是每次都錯,還是偶爾錯?

例如匯率換算腳本,你發現輸入 100 沒問題,輸入 1,000(有逗號)就當掉。這就是很重要的線索,比「有時候會壞掉」有用太多了。

第 2 步:收集完整線索

Python 出錯時,會印出一大段叫做 Traceback 的錯誤訊息,它是程式留給你的「事故報告」。很多初學者看到一長串紅字就慌了,其實它很有規律:由下往上讀。

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 步,把新的錯誤訊息和目前的程式碼再提供一次。不要只說「還是不行」,因為錯誤訊息可能已經變了,那是很重要的新線索。

卡關時:縮小成最小範例

如果程式很長、錯誤很難找,試著把問題縮小:

  1. 另開一個新檔案。
  2. 只放重現錯誤所需的最少程式碼,例如把讀檔換成寫死的資料。
  3. 一直刪,刪到再刪就不會出錯為止。

這個過程常常讓你自己就發現問題所在。就算沒有,一段十行的範例也比三百行的程式更容易讓 AI 看懂。

請 AI 幫你縮小範例

這段程式在處理含逗號的金額時會出錯。請幫我寫一個最小可重現範例:用最少的程式碼、不讀任何檔案,只重現這個錯誤。先不要修正它。

行動練習
  1. 寫一個匯率換算腳本,故意不把 input() 的結果轉成數字,讓它出錯。
  2. 依照「有方向的問法」範本,把操作、預期、實際錯誤、程式碼整理好,問 Claude 或其他 AI,並要求先說明原因。
  3. 只套用最小修改,執行確認。
  4. 再試試輸入 1,000 或 abc,看看會發生什麼事,用同樣流程處理第二個錯誤。

讀完了嗎?

標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。

卡住了?讓 AI 當你的家教複製這段提問範本,貼到 Claude 或其他 AI 工具,再補上你卡住的地方。

留言與討論

卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。

留言區即將開放。現在可以先到 GitHub 討論區 發問,或看看 交流頁 的其他管道。