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 才安全。让学生自己数行数,比讲道理快。
板书只留两行对照: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 条件,数字先算后写,条件就不会写反。
用 240 笔资料、12 笔不合格(5.0%)做例子,让学生先算出合格率 95.0%,再写 if 条件,数字先算后写,条件就不会写反。
要学生做:写出验证条件,并讲出为何不合格的 12 笔不可以直接丢掉而要记录。
第三幕:except 要精准,否则错误会被吞掉
学生最爱写 except: 或 except Exception: pass,程式不再爆,但资料错了也无人知。教法是三类错误各写一个具名 except,并且用 else 讲成功、finally 讲收尾。FileNotFoundError 是路径问题(要提示用户检查档名);ValueError 是资料问题(要记录行号并跳过该行);ZeroDivisionError 是逻辑问题(要先判断除数是否为 0)。
再补一句规则:能修的错才接,不能修的错要让它爆,这样 traceback 才会指出真正的行号。
再补一句规则:能修的错才接,不能修的错要让它爆,这样 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 家课建议(直接指到练习卷题号)
- 中学 ICT 章节索引 全科章节一览
- 备课指引总索引 其他科目的同类章节
- 本章重做 重做 Exercise B:Q1–Q3(读档统计)、Q4–Q5(例外判定)、Q6(除错)
08 离场检查(最后 5 分钟)
| 题目 | 答案 | 判定 |
|---|---|---|
| with open | 自动关档+encoding | 讲不出为何要 encoding=回到第二幕 |
| 验证写入 | 先验后写,坏行记录 | 答“读完直接写”=重讲第二幕 |
| 三类例外 | FileNotFound/Value/ZeroDivision | 仍写空白 except=回到第三幕 |
09 导师常问
一定要用 csv 模组吗?
不一定,split(“,”) 也可以,但遇到引号内有逗号就会错,csv 模组较稳。
要用 pandas 吗?
DSE 课程不需要,用内建 csv 已足够,亦较易在纸上写。
例外要背几多个?
三个核心就够:找不到档、数值格式错、除以零,其余可以查。
本页为 TutorZone 导师备课指引,内容由 TutorZone 团队编写;题目与流程为原创,并非任何学校或出版社的教材。


