把大问题缩成一个可以稳定重现的小例子,往往比不断改动整段程序更容易定位原因。
先记录三个事实
- 输入是什么:保留能触发问题的最小数据。
- 原本期望什么:写出明确的结果或规则。
- 实际发生什么:记录返回值、异常类型和必要的运行条件。
用一个边界问题练习
计算平均值时,非空列表容易处理;空列表应该怎样返回,需要先明确约定。这里选择抛出异常,避免把“没有数据”混同为平均值为 0。
def average(values):
if not values:
raise ValueError("至少需要一个数值")
return sum(values) / len(values)
assert average([2, 4, 6]) == 4
try:
average([])
except ValueError as error:
print(error)
一次只改变一个条件
先确认最小示例能够稳定失败,再逐个排除输入、依赖版本和代码分支。修正后同时检查原有正常输入和触发错误的输入,避免只让一个案例通过。
学习小结
先复现,再缩小范围,最后验证修正。分享复现材料时,移除账号、密码、令牌和其他个人信息。