1.11 · 测试与调试
目标: 知道课程点名的数值与结构错误以及调试工具。
数值错误(课程点名)
| 错误 | 原因 | 例 |
|---|---|---|
| 舍入 Rounding | 十进精度受限 | 0.1 + 0.2 != 0.3 |
| 截断 Truncation | 截掉多余位 | int(3.9) → 3 |
| 溢出 Overflow | 结果超最大可表示 | Int32 最大 + 1 环绕 |
| 下溢 Underflow | 结果小于最小可表示 | 极小 float 变 0 |
缓解:
- 钱用
Decimal避 float 舍入。 - 用 64 位整数(Python 的
int任意精度)。 - 刻意用
round()。
其他错误(复习)
| 类型 | 何时 |
|---|---|
| 语法 | 编译 / 解释时 |
| 逻辑 | 跑但输出错 |
| 运行时 | 执行中崩 |
调试工具
| 工具 | 做什么 |
|---|---|
| Stubs 占位 | 自顶向下开发时用的空占位函数 |
| Flags 标志 | 切换行为的布尔状态变量 |
| Break points 断点 | IDE 调试器在选定行暂停以查状态 |
| Program trace 程序追踪 | print / logger 显变量值 |
| Test data sets 测试数据集 | 正常 / 边界 / 错误 |
调试走查
设函数本应返平均但返 0。
- 用小输入复现。
- 关键点加 print:python
def average(nums): print("DEBUG nums:", nums) total = sum(nums) print("DEBUG total:", total) return total / len(nums)1
2
3
4
5 - 假设 —— 除以零?总和错?
- 修并删 debug print。
学生常见错误
- 捕异常以藏 bug。
- 一次改太多。
- 忘边界测试。
- 信「我机器上能跑」。
考试式题目
题(5 分): 识别错误类型并各提一种调试技术: (a) 程序印
0而非平均。 (b) Python 抛IndexError: list index out of range。 (c) 程序起不来:「SyntaxError: invalid syntax」。 (d) 结果是0.30000000000000004而非0.3。
参考答案:
(a) 逻辑错误。用追踪表或 print 调试查中间值;可能原因:累加前先除、循环边界偏差 1。
(b) 运行时错误。在索引行加断点,查列表长度 vs 索引;加守卫 if i < len(arr)。
(c) 语法错误。读错误信息行号;查未匹配括号、漏冒号、坏缩进。
(d) 数值舍入错误,由二进制浮点引起。显示用 round(x, 1),或切到 Decimal 做精确算术。
关键要点
- 数值错误:舍入、截断、溢出、下溢。
- 调试工具:占位、标志、断点、追踪、测试数据。
- 系统地修。
第 1 章总结
你完成了 2C 的主体。自测:
- 能实现线性 & 二分查找吗?
- 能实现冒泡、插入、选择排序吗?
- 能在 Python 建栈、队列、链表吗?
- 能系统调试吗?
➡️ 下一章:2 · 现实中的编程