正在啟動 Python 環境(首次約 15 秒)...
錯誤處理與防呆
情境:你正在批次處理 1000 筆訂單,結果第 500 筆格式錯了。如果不做防呆,程式直接崩潰,前面 499 筆的結果全部白費。try/except 讓你「錯一筆不拖累全批」,程式繼續跑完並留下紀錄。
你會學到什麼
- 用
try/except隔離壞資料,讓批次作業不中斷 - 補齊缺欄位或給預設值,避免
KeyError崩潰 - 撰寫自訂驗證函數,先檢查後處理
常見錯誤速查表
| 錯誤類型 | 何時發生 | 快速處理 |
|---|---|---|
| ValueError | 轉型失敗,如 "abc" 轉 int | try/except 跳過或記錄 |
| KeyError | 字典缺欄位,如缺 discount | try/except 或 dict.get(key, default) |
| TypeError | 型態不符,如需要數字卻給字串 | 先驗證型態,不符就 raise |
跳過壞資料:處理 ValueError
當某筆金額無法轉成數字時,跳過並記錄,其他筆照算。
小提醒:只抓住你預期的例外類型(這裡是
ValueError),不要用空的except:把所有錯誤都吞掉,否則真正的程式 bug 會靜悄悄消失。
缺欄位也能繼續:處理 KeyError
某筆訂單少了折扣欄位,給預設值 0 就能不中斷繼續算。
小提醒:
dict.get("discount", 0)是更簡短的寫法,效果相同。但try/except能在補救流程中加入更多邏輯(例如記 log)。
自訂驗證函數
在進入主流程前,統一驗證欄位格式,壞資料直接丟出自訂錯誤訊息。把驗證集中成函數,方便重用。
小提醒:
raise是「自己丟出錯誤」,讓上層的try/except來接。錯誤訊息寫清楚(例如「價格必須是數字」),方便追查第幾筆出錯。
AI 協作:學了這個,跟 AI 怎麼配合?
AI 寫的程式最怕遇到「意料之外」的資料就整個中斷。try/except 就是防呆機制。
你的人類優勢:
- 你知道實際資料有多髒(空值、格式錯誤、缺欄位)
- 你能決定錯誤發生時要「跳過」還是「記錄」還是「停止」
可以這樣跟 AI 說:
這段程式處理 1000 筆資料,有些金額欄位是空的會報 ValueError。幫我加 try/except,遇到錯誤就跳過那筆並記錄下來。
練習題
互動示範
DEMO 1可以修改程式碼試玩
DEMO 2可以修改程式碼試玩
DEMO 3可以修改程式碼試玩
挑戰任務
Task 1
將字串列表 ['10','x','5'] 逐一轉成 int,加總可轉換的部分後印出總和
Task 2
嘗試存取 customer['email'],若 KeyError 則印出 'missing'
Task 3
寫一個函數 check_qty(qty),若 qty 不是整數則丟出 TypeError,否則回傳 qty*2;測試 check_qty('3') 並捕捉錯誤後印出 'bad qty'
← BackNext Lesson →