库存0为何被判漏填:用 Codex 修复校验并复查

库存填了0,程序却提示“漏填”,问题可能藏在一句 if not value 里。Python 中0和 None 都是假值,但它们在业务上的含义并不相同。

这个例子用自建 JSON 教学样本,故意在修前版保留错误判断,再用同一套验收检查修复。它不是客户事故,也不是真实库存表。

先把0的含义说清楚

本例约定:

输入 结果
整数0、正整数 合法库存
null、空字符串、纯空白 缺失
负数、小数、数字字符串、布尔值 不接受

业务规则要先确定。某个商品重量不能为0,并不意味着库存也不能为0。

缺失、类型和范围分别判断

原修后实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
def validate_stock(value):
if isinstance(value, bool):
raise ValueError('invalid_type')
if isinstance(value, str) and not value.strip():
raise ValueError('missing')
if value is None:
raise ValueError('missing')
if not isinstance(value, int):
raise ValueError('invalid_type')
if value < 0:
raise ValueError('invalid_range')
return value

布尔值在 Python 中与整数类型有关,因此本例先排除它。缺失判断也不再使用会把0一起拦住的真假值检查。Python:真值测试与布尔类型

用同一套测试确认变化

给 Codex 的任务可以这样写:

1
2
3
4
先用数值0复现失败,保持输入与同一套验收测试。
只修库存判断,不删用例,不放宽预期。
重跑测试和6行样例,确认0被保留,原有异常仍被拦截。
保存命令、退出码、结果与代码差异。

2026年10月26日 Windows / Python 3.13.5 的原运行结果:修前8项测试中1项失败,正好是0;修后同一份8项全部通过。6行样例通过数从2变3,A01的0库存通过,其余5行结果不变。输入和测试文件的哈希保持一致。

下载后自己复现

下载修前、修后、样例与测试

在解压目录运行:

1
2
3
python -B test_stock.py --implementation before
python -B test_stock.py --implementation after
python -B check_inventory.py --implementation after sample.json

第一条是故意保留错误的教学版本,原记录中预期退出1;第二条预期通过。运行脚本不调用 API。

本文于2026年10月27日整理,没有重跑原实验。验证范围仅为这些教学数据与边界,不包含 Excel/CSV 读取、真实库存、重复SKU或并发同步。