| 进度条:学习第 38 天(38/191)|当前完成度:约 31% |
📎 今日速览:主学 try/except 异常处理 + traceback,4 轮报错实验亲手跑通作用域题和 traceback 题,最大体会:报错不是失败,是实验数据 ← 先看这段
〇、今日投入 & 产出(量化)
| 维度 | 内容 | 量化 |
|---|---|---|
| 投入-时间 | 看视频 + 抄跑代码 + 4 轮报错实验 | 约 3~4 小时 |
| 投入-外部输入 | try/except 视频教程、手写笔记 2 页、学习复盘文档 | 3 类 |
| 产出-代码/数据 | try_except练习.py:异常结构、作用域题、traceback 题、4 轮报错实验 | 1 份代码 |
| 产出-文档/博客 | 本篇 Day 38 学习笔记(含 4 个踩坑全记录) | 1 篇 |
一、今日任务(完成+收获)
1.1 今日任务原文
学习 try/except 异常处理,配合 traceback 模块;理论听懂后必须亲手写代码、亲手踩坑,跑通作用域题和 traceback 题。

📷 图1:try/except 手写笔记(结构与变量作用域要点)
1.2 完成情况
| 任务项 | 计划 | 实际 | 状态 |
|---|---|---|---|
| try/except 基本结构与语法 | 掌握 | 掌握,含 else / finally / raise 全家福 | ✅ 完成 |
| 指定异常类型与多分支捕获 | 掌握 | 掌握,能按类型分类处置 | ✅ 完成 |
| 变量作用域题 | 跑通 | 亲手跑通,含未定义变量陷阱 | ✅ 完成 |
| traceback 题 | 跑通 | print_exc / format_exc 都跑过 | ✅ 完成 |
| 4 轮报错实验 | 逐个踩坑 | 4 个坑全部复现并解决 | ✅ 完成 |
1.3 今日收获 & 学到的知识点
① try / except 是什么:try 里放"可能出错的代码",except 里放"出错后的补救"。就算出错,程序也不会一下崩掉。
- 大白话:端汤先垫个托盘(try),洒了只脏托盘(except),桌子没事。
② 指定异常类型(只抓你想抓的错) :except 后面写具体错误名(比如 ZeroDivisionError),就只接这一种错;也可以用 except Exception as e 把"所有错"都接住再慢慢看。
- 大白话:except 像门口保安,你写"只拦张三",那李四进来就放行;写"所有人",那就谁来拦谁。
**③ 报错分两种(对比表)**
| 对比项 | 格式错误(SyntaxError) | 运行时错误(1/0 这类) |
|---|---|---|
| 错在哪 | 句子写错了,Python 还没跑就拦下 | 句子没错,跑到一半才炸 |
| 怎么发现 | 红色小箭头 ^ 指着错字 |
报错里写明第几行 |
④ traceback:教你看懂报错红字 。读法就一句:从下往上读------最后一行是错误类型,往上是第几行出错。
| 写法 | 作用 |
|---|---|
traceback.print_exc() |
当场把报错打出来 |
error_info = traceback.format_exc() |
把报错抄成一个字符串存起来,想打印再打印 |
**⑤ 变量的两个坑(今天最大的收获)**:
-
坑一:变量全文件通用。前面定义过的 x,后面随时能用;重名会拿到旧值。比喻:公共冰箱贴了你的名字,全屋都能拿------旧标签不撕,拿到的可能是上周的剩菜。防法:一个变量只干一件事,新功能起新名字。
-
坑二:try 里出事太早、变量还没来得及赋值,except 里用它就会报 NameError。防法:先写
result = None占个位。
⑥ finally / else / raise 一句话分工:else 没出错才跑;finally 收摊必跑;raise 主动拉警报。

📷 图2:traceback 手写笔记(print_exc 与 format_exc 用法)
二、卡点分两类(已解决 / 未解决)
✅ 今日已解决
2.1 两句代码挤一行报 SyntaxError 怎么解开的
-
什么时候出现 :写成
y = 1 / 0 x = 10,报SyntaxError: invalid syntax,红色小箭头^指着出事位置。 -
我的理解:像对服务员一口气糊着说"番茄炒蛋不要香菜帮我加菜",Python 听不懂。
-
解决办法:两句代码各占一行,顺手记住口诀"冒号、缩进、一句一行"。
✅ 验证结果:拆成两行后正常运行,除零错误如约而至。
2.2 改了代码却"没变化"(旧变量干扰)怎么解开的
-
什么时候出现:把 x = 10 挪到 1/0 后面,运行居然还打印 10,没有报错;思考题的 NameError 一直抓不到。
-
我的理解:实验 1 早在文件开头定义过 x = 10,变量全文件共享,except 里的 print(x) 摸到的是旧 x------不报错、只悄悄给错值,比报错更可怕。
-
解决办法:把变量换成全文件从没用过的名字 price 再跑。
✅ 验证结果 :成功抓到
NameError: name 'price' is not defined,还附赠彩蛋Did you mean: 'print'?。验证"应该报错"的行为时,要用全新变量名排除干扰因素。

📷 图3:VS Code 实操截图------终端精确报出异常位置与类型
2.3 报错信息比想象的长怎么解开的
-
什么时候出现:NameError 前面多了一段 "During handling of the above exception, another exception occurred"。
-
我的理解:处理第一个异常(除零)的过程中又冒出第二个异常(price 未定义),Python 把两件事都记录在案------像事故报告的"连环追尾记录"。
-
解决办法:学会从下往上读 Traceback:最后一行是错误类型,往上是案发位置。
✅ 验证结果:能独立读懂完整报错信息,准确定位到 line 79。
❓ 还没搞懂(带到明天)
| 没吃透的点 | 卡在哪 | 准备什么时候啃 |
|---|---|---|
| raise 主动抛异常与异常链完整机制 | 只知道 raise 能拉警报,"连环追尾记录"的底层规则还没亲手实验过 | 本周内 |
💡 今天没踩硬坑,这条是"最拿不准、想验证但还没验证"的点。
三、小结和下一步计划
3.1 今日小结
-
停更了几天处理个人事情,这篇 Day 38 断断续续练了两天才成稿------没有赶进度笔记和代码都是亲手磨出来的。
-
理论(看视频)30 分钟就觉得"全懂了",实操却花了好几个小时,但正是这 4 个坑让每个知识点都长在了手上:作用域题和 traceback 题都亲手跑通。复更第一天,越踩坑越踏实。
3.2 ✨ 高光时刻 / 亮点
换了一个从没用过的新变量名 price 再跑,成功抓到了 NameError 报错。
为什么算高光:结果太顺利的时候,先怀疑"是不是没跑到新代码"------这个排查习惯,以后做产品验证也用得上。
3.3 下一步计划
| 任务 | 验收标准 |
|---|---|
| 学 HTTP 与 API 概念:请求 / 响应 / 状态码 | 看视频 + 代码实操运行,能用自己的话说清"请求-响应"一来一回,认出 200 / 404 这类状态码 |
| raise 主动抛异常实验(遗留) | 亲手制造一次异常链,读懂完整"连环追尾"报错 |
📌 3 行速记
· 做了:try/except + traceback 理论 + 4 轮报错实验,跑通作用域题和 traceback 题
· 学会:变量作用域相通但赋值前跳转会 NameError;traceback 能精确到行;报错是实验数据
· 卡住:raise 主动抛异常与异常链机制未亲手实验