文章
学习
从 Python 到 Data/AI 一年计划计划第 6 / 10 篇 对应成果

Week 3 学习计划|异常、测试与 Debugging

Week 3 学习计划:从 Exception / traceback / raise / try-except-finally 出发,独立编写 boundary / invalid input / exception test,配合 fixture 与 mock,并主动制造 off-by-one / None / type / state 四类 bug 完成定位、解释、修复与回归测试。

PythonWeek3异常处理traceback单元测试pytestfixturemockdebugging回归测试

本周计划对应一年学习计划总纲 Phase I 的 Week 3 · 异常、测试与 Debugging,按总纲 Part II「每周固定执行模板」编排。本篇只是规划,不含执行结果;实际产出完成后另写 Week 3 学习成果。

🎯 本周目标

L1

  • 能读懂 traceback,讲清 Exception / traceback / raise / try-except-finally 的语义。

L2

  • 不看参考独立编写 boundary test、invalid input test、exception test,并接上 fixture 与 mock。

L3

  • (总纲本周等级为 L2,不设 L3)

📚 Core Knowledge

总纲 Week 3 学习内容:

Exception / traceback / raise / try-except-finally / unit test / fixture / mock / regression。

  • 异常:try / except / else / finally、raise、异常层级、traceback 的阅读方式
  • 单元测试:pytest 基本用法、assert、测试函数命名与发现规则
  • fixture:准备测试环境(临时文件、临时数据库、构造好的对象)
  • mock:替换不想真跑的东西(网络请求、时间、随机数、文件 IO)
  • regression:每修好一个 bug 就补一条测试,再跑全量确认没有破坏别处

✍️ Human Core

总纲 Week 3 要求独立写(不看参考):

  • boundary test(边界值)
  • invalid input test(非法输入)
  • exception test(异常路径)

三类测试的要求:

类型说明例子
boundary test边界值0、-1、len、len+1、空列表、单元素
invalid input test非法输入None、错误类型、空字符串、超长输入
exception test异常路径该抛的异常抛了吗?抛的类型对吗?消息对吗?

要求:不看参考,自己写。

🤖 AI Build

总纲 Week 3 分工:AI 负责扩充测试、review 测试、人为制造 bug;你负责定位、解释、修复。

AI 做你做
扩充测试用例判断 AI 的测试有没有漏、有没有错
review 你的测试接受或反驳 AI 的意见
人为制造 bug定位、解释、修复

🧪 Experiment

总纲 Week 3 要求:主动制造四类 bug。

Bug 类型典型场景
off-by-one循环多跑/少跑一次,索引差一
None bugNone 没判空就调用方法
type bugint 当 str 用,list 当 dict 用
state bug共享可变状态、修改后没同步

每个修好后,补一个回归测试。

Hypothesis

  • 主动制造并修复典型 bug,能训练从 traceback 到根因的定位能力,也能暴露测试覆盖的盲区。

Experiment

  • 先写测试,再让 AI 或自己引入四类 bug,观察测试是否捕获;对未捕获的补测试,对捕获的走 Debug 四步法。

Result

  • 待执行后填入。

Conclusion

  • 待执行后填入。

📝 数智工程师考试映射

  • 异常处理与错误传播
  • 单元测试、测试隔离与回归测试
  • 调试方法与根因定位

✅ Acceptance

总纲 Week 3 验收:看到 traceback 后能够完成「定位 → 解释 → 提出原因 → 修复」。

L1

  • 能读懂 traceback,定位到出错文件与行号

L2

  • 能独立编写 boundary / invalid input / exception test
  • 能按要求完成 Debug 四步法

L3

  • 总纲本周不设 L3

🧠 本周最重要的问题

看到 traceback 后,能不能不靠猜,走完「定位 → 解释 → 原因 → 修复」四步?

❓ 尚未解决

  • 待执行后填入

📊 Final Level

L2

周内节奏(3–4 天)

天内容状态
Day 1异常 + traceback 复习 + 读 traceback 训练待开始
Day 2Human Core:自己写 boundary / invalid / exception test待开始
Day 3fixture + mock,绑定真实场景待开始
Day 4主动制造 4 类 bug,定位 → 解释 → 原因 → 修复 → 补回归测试待开始
Day 5(可选)AI 扩充测试 + review,你判断 AI 的测试质量待开始

Debug 四步法

1. 定位:哪一行?哪个文件?
2. 解释:这行在干什么?为什么出错?
3. 原因:根本原因是什么?
4. 修复:改什么?怎么验证改对了?

Fixture 与 Mock

概念目的场景
fixture准备测试环境临时文件、临时数据库、构造好的对象
mock替换不想真跑的东西网络请求、时间、随机数、文件 IO

测试覆盖标准

维度做法
边界值0、-1、len、len+1、空、单元素
等价类合法输入取代表,非法输入按类型分组
分支覆盖每个 if/else 至少各走一次

回归测试

每修好一个 bug,补一个测试:

def test_parse_int_rejects_none():
    assert parse_int(None) is None

跑完整测试,确认没破坏别的。

来源与延伸阅读

  1. 01Week 1 学习计划|Python 对象模型与数据结构week-1计划
  2. 02一年学习计划:从 Python 到 Data/AI 系统的 52 周计划
  3. 03Week 1 学习成果|复杂度实测、对象模型与数据结构实战week-1成果
  4. 04Week 2 学习计划|Python 函数、作用域、闭包与模块化week-2计划
  5. 05Week 2 学习成果|闭包、decorator 与工程化重构week-2成果
  6. 06Week 3 学习计划|异常、测试与 Debuggingweek-3计划
  7. 07Week 3 学习成果|异常、traceback 与 Debug 起步week-3成果
  8. 08Week 4 学习成果|Big-O 与四类基础算法week-4成果
  9. 09Week 5 学习成果|Stack、Queue 与 MinHeapweek-5成果
  10. 10Week 6 学习成果|图算法与 Python Engineering Toolkitweek-6成果