这套课程按知识依赖排列。本篇的前置知识是:第 22、27、33 篇。学完后,你应该能够把失败缩小到可重复验证的函数。
本篇要解决的问题
本篇只处理“调试、日志与自动化测试入门”这一件事。示例基于 Python 3.14.6,在 macOS 环境核验;除明确标注的终端命令外,代码本身只使用 Python 标准能力。
先看清一个容易误解的细节
先稳定复现失败,再通过日志或断点确定出错范围,最后把问题缩小为有明确输入输出的函数,用测试固定正确行为。
核心概念
- 调试先追求稳定复现,不要同时修改多个无关位置。
- 日志记录运行状态,测试判断结果是否符合约定。
- 测试名称描述场景;边界值通常比只测普通值更有价值。
跟着示例运行
把下面代码保存到本课脚本并运行:
import logging
import unittest
logging.basicConfig(level=logging.INFO)
def clamp_progress(value):
logging.info("检查进度:%s", value)
return max(0, min(100, value))
class ProgressTest(unittest.TestCase):
def test_upper_limit(self):
self.assertEqual(clamp_progress(120), 100)
if __name__ == "__main__":
unittest.main()
预期结果:
测试通过时显示 Ran 1 test 和 OK;日志格式可能包含级别与模块名
输出中包含环境路径、集合元素或日志格式时,具体文字和顺序可能随本机环境变化;判断是否成功应以本篇说明的关键结果为准。
按执行顺序拆开看
clamp_progress把输入限制在 0 到 100,并用日志记录本次检查值。- 测试直接给出边界外输入 120,断言返回值必须是 100;实现变化后可以重复运行同一约定。
再看一个具体细节
一个小测试可以拆成准备、执行和断言三个部分。
准备输入,调用被测函数,再比较实际值与期望值;失败信息才能明确指出哪项约定被破坏。
初学者容易混淆的地方
- 只看日志里“没有报错”就认为结果正确;测试需要明确比较期望值。
- 测试依赖真实网络、当前时间或共享文件却不隔离,造成结果不稳定。
练习
- 为负数进度增加测试。
- 故意把上限改成 90,观察失败信息如何定位差异。
练习应先独立完成,再通过增加 print 输出或检查文件内容观察中间状态。当前课程尚未讲到的能力,不要求提前搜索复杂写法。
本篇边界
本篇目标是把失败缩小到可重复验证的函数。没有展开的高级机制会放到后续课程;先确保能够解释示例中每一行代码,再进入下一篇。
相关文章
01|Python 程序从源码到输出经历了什么
面向按顺序学习 Python 的初学者,本篇在零基础上,帮助读者理解源代码、解释器和输出之间的关系。
02|在 macOS 安装并确认 Python 3 环境
面向按顺序学习 Python 的初学者,本篇在第 01 篇知识上,帮助读者在 macOS 中确认 Python 3.14 和 pip 是否可用。
03|交互式解释器和 Python 脚本怎么选择
面向按顺序学习 Python 的初学者,本篇在第 02 篇知识上,帮助读者根据任务选择 REPL 或 `.py` 脚本。
04|建立第一个 Python 项目目录
面向按顺序学习 Python 的初学者,本篇在第 03 篇知识上,帮助读者理解当前目录并正确运行项目脚本。

