/tutor-prep-s5-ict-file-handling-exceptions/
/tutor-prep-s5-ict-file-handling-exceptions/
一般查詢: info@TutorZone.com.hk
辦公時間: 星期一至六 - 上午 9 時至下午 6 時
WhatsApp 星期一至日 - 24 小時
人手接聽: +852 6828 1809
即時客服: +852 9061 3106

DSE ICT|Python 檔案處理與例外處理備課指引(導師用)|with open、CSV 讀寫、三類例外與四個常見錯誤

DSE ICT|Python 檔案處理與例外處理備課指引(導師用)|with open、CSV 讀寫、三類例外與四個常見錯誤

  • 2026-11-06

學生寫 open() 之後忘記 close,遇到檔案不存在就整支程式停掉,或者用 except: 把所有錯誤吞掉,之後更難除錯。檔案與例外是同一個習慣的兩面:先講清楚「資源幾時開幾時關」,再講清楚「哪一種錯要接、哪一種錯要讓它爆」。

本堂目標 學生能夠:① 用 with open(…, encoding=”utf-8″) 讀寫文字檔,並講出為何不用手動 close;② 用 csv.reader 逐行讀 240 筆資料、跳過 12 筆不合格記錄(5.0%),只把 228 筆寫入新檔;③ 為三類錯誤(FileNotFoundError、ValueError、ZeroDivisionError)各寫一個精準的 except,並用 else/finally 講清楚成功與收尾的分工。

01 先備知識(開課前 3 分鐘快檢)

以下任何一項未過關,本堂就會卡住,先補該項:

技能 快檢題 過關標準
檔案路徑 同一個資料夾內的 data.csv 怎樣寫路徑? 直接寫 “data.csv”,相對路徑以程式執行位置為準
字串處理 讀入一行 “12,apple,3.5” 要怎樣拆? 用 split(“,”) 或 csv.reader
型別轉換 int(“abc”) 會發生甚麼事? 拋出 ValueError,程式若不接就會中斷

02 課堂流程(60 分鐘)

時間 環節 導師做什麼 學生做什麼
0–6 分 爆一次機開場 故意讀不存在的檔案,讓程式停掉,問為甚麼 講出錯誤名稱
6–18 分 with open 與 encoding 示範讀檔、逐行、rstrip,對比忘記 close 的版本 改寫一段讀檔
18–30 分 CSV 讀寫與驗證 240 筆 → 12 筆不合格 → 228 筆寫入新檔 寫出驗證條件
30–42 分 三類例外 各示範一個 except,加 else/finally 為三種錯寫 except
42–56 分 除錯演練 四段有 bug 的程式,逐段找錯並講原因 限時修好兩段
56–60 分 離場檢查 三題收回即批,標明錯在資源還是例外 獨立完成

03 講解腳本(照著說就可以)

第一幕:with open 是資源習慣,不是語法裝飾

學生寫 f = open(…) 之後直接做其他事,檔案沒關,Windows 上再開同一個檔就會失敗,而學生只會覺得「電腦壞了」。要講清楚 with 的價值:區塊一結束就自動 close,即使中途出錯都會關。再加 encoding=”utf-8″,否則中文資料在不同機器會變亂碼或直接拋 UnicodeDecodeError。
板書只留兩行對照:with 版本三行寫完、手動版本六行還要 try/finally 才安全。讓學生自己數行數,比講道理快。

要學生做:把一段手動 open/close 的程式改寫成 with 版本,並講出多了甚麼保障。

第二幕:讀檔要逐行,驗證後才寫入

學生的做法通常是 read() 一次讀全部再 split,遇到大檔就爆記憶體,而且一有壞行就整批失敗。正確流程是三段:讀、驗、寫。讀:for row in csv.reader(f) 逐行處理;驗:檢查欄數與數值(例如分數必須 0 至 100);寫:只把合格的 228 筆 append 到新檔。
用 240 筆資料、12 筆不合格(5.0%)做例子,讓學生先算出合格率 95.0%,再寫 if 條件,數字先算後寫,條件就不會寫反。

要學生做:寫出驗證條件,並講出為何不合格的 12 筆不可以直接丟掉而要記錄。

第三幕:except 要精準,否則錯誤會被吞掉

學生最愛寫 except: 或 except Exception: pass,程式不再爆,但資料錯了也無人知。教法是三類錯誤各寫一個具名 except,並且用 else 講成功、finally 講收尾。FileNotFoundError 是路徑問題(要提示用戶檢查檔名);ValueError 是資料問題(要記錄行號並跳過該行);ZeroDivisionError 是邏輯問題(要先判斷除數是否為 0)。
再補一句規則:能修的錯才接,不能修的錯要讓它爆,這樣 traceback 才會指出真正的行號。

要學生做:為三段錯誤程式各寫一個具名 except,並說明為何必不可用空白 except。

04 必教題型與步驟

題型 例子 步驟 答案
讀檔統計題 讀 data.csv 計平均分 with open + csv.reader → 累加 → 除以有效筆數 要處理空行與非數值欄
例外判定題 問這段程式拋哪個例外 看是哪一行、哪個型別轉換失敗 答案要寫例外名稱+行號
寫入模式題 分辨 w 與 a w 清空重寫、a 追加 要講出覆蓋的後果
除錯題 找四段程式的錯 按資源、編碼、驗證、例外四類順序查 每段要指出錯因與修法
合理性檢查(一定要教):合理性檢查:全堂只圍繞一個資料檔(240 筆、12 筆不合格),避免例子過多;每個 except 必須具名,出現空白 except 即扣分;寫入前一定要先驗證,並且保留不合格記錄的日誌;示範要包含「忘記 close 導致第二次開檔失敗」與「except pass 令錯誤隱形」兩個真實後果,學生才會覺得規矩有用。

05 獨立練習三題

題目 答案 想觀察什麼
讀檔改造 把手動 open/close 改成 with 版本 看是否加了 encoding
驗證寫入 240 筆中篩出 228 筆寫入新檔 看合格率是否算對、壞行有沒有記錄
三類例外 為三段程式各寫具名 except 看是否仍出現空白 except

06 學生常見錯誤與糾正句

錯誤 學生通常這樣寫 導師這樣說
忘記關檔 f = open(…) 之後沒有 close 「你第二次開同一個檔就失敗,係因為第一個仲鎖住。用 with,佢自己會關。」
空白 except except: pass 當成萬能 「你接咗錯但唔知錯咩,下次資料錯都無人發現。要寫明係邊一種錯。」
用 w 想追加 想加一行就用 open(…, “w”) 「w 會清空成個檔,你原本 228 筆冇晒。要加就用 a。」
冇 encoding open(“data.csv”) 讀中文變亂碼 「加 encoding=”utf-8″,唔係換部電腦就讀唔到。」

07 家課建議(直接指到練習卷題號)

08 離場檢查(最後 5 分鐘)

題目 答案 判定
with open 自動關檔+encoding 講不出為何要 encoding=回到第二幕
驗證寫入 先驗後寫,壞行記錄 答「讀完直接寫」=重講第二幕
三類例外 FileNotFound/Value/ZeroDivision 仍寫空白 except=回到第三幕

09 導師常問

一定要用 csv 模組嗎?

不一定,split(“,”) 也可以,但遇到引號內有逗號就會錯,csv 模組較穩。

要用 pandas 嗎?

DSE 課程不需要,用內建 csv 已足夠,亦較易在紙上寫。

例外要背幾多個?

三個核心就夠:找不到檔、數值格式錯、除以零,其餘可以查。

立即免費搵導師導師登記 →

本頁為 TutorZone 導師備課指引,內容由 TutorZone 團隊編寫;題目與流程為原創,並非任何學校或出版社的教材。

招募導師及興趣班教練|學術、樂器、體育、藝術、STEM,免費登記,招生與配對交給平台。 了解詳情 →