商品资料混入空字段,生成必填项缺口清单要处理的不是商品效果,而是一类可以由程序明确判断的输入问题。用JSON对象表达商品资料,必填字段为sku、name与package。值必须是非空字符串;程序分别报告缺键、空值及类型错误,避免只用真假值判断混淆三类缺口。
商品资料混入空字段,生成必填项缺口清单要处理的不是商品效果,而是一类可以由程序明确判断的输入问题。用JSON对象表达商品资料,必填字段为sku、name与package。值必须是非空字符串;程序分别报告缺键、空值及类型错误,避免只用真假值判断混淆三类缺口。
输入契约与实现
用JSON对象表达商品资料,必填字段为sku、name与package。值必须是非空字符串;程序分别报告缺键、空值及类型错误,避免只用真假值判断混淆三类缺口。

代码把必填字段诊断限定成小范围任务,刻意不增加网络请求、文件覆盖和发布动作。
运行结果与排错
完整对象返回空列表;错误对象分别返回type、blank、missing;数组作为根输入抛出record_must_be_object。
字段有值不说明值真实。package存在也不能证明包装确有这些物件,实际内容还要对应商品资料,不由程序生成未知规格。如果要扩大范围,先添加对应失败夹具,再修改实现。
成功分支同样要验证结果含义。
放在图片制作链路的哪里
这个工具适合放在字段检查工具相关的本地资料整理环节,和图像制作保持解耦。
实际交接至少保留输入版本、代码版本和完整报告。
本例的覆盖范围是:完整对象返回空列表;错误对象分别返回type、blank、missing;数组作为根输入抛出record_must_be_object。未覆盖的边界是:字段有值不说明值真实。package存在也不能证明包装确有这些物件,实际内容还要对应商品资料,不由程序生成未知规格。
import json
def validate(record, fields=('sku', 'name', 'package')):
if not isinstance(record, dict):
raise ValueError('record_must_be_object')
issues = []
for key in fields:
if key not in record:
issues.append([key, 'missing'])
elif not isinstance(record[key], str):
issues.append([key, 'type'])
elif not record[key].strip():
issues.append([key, 'blank'])
return issues
good = json.loads('{"sku":"001","name":"杯子","package":"杯子一只"}')
bad = {'sku': 1, 'name': ' '}
assert validate(good) == []
assert validate(bad) == [['sku', 'type'], ['name', 'blank'], ['package', 'missing']]
try:
validate([])
except ValueError as exc:
assert str(exc) == 'record_must_be_object'
else:
raise AssertionError('expected rejection')
print(json.dumps({'success': validate(good), 'errors': validate(bad)}, ensure_ascii=False))
编辑复核与下一组测试
必填项缺口清单的价值在于把缺键、空值与类型错误分开,让不同来源的问题有不同修复动作。对sku、name、package三个字段,missing意味着对象里没有这个键,应检查资料模板或字段映射是否漏传;blank意味着值没有满足非空字符串要求,应向填写者索取实际内容;type意味着值的类型不符合约定,应查导出或组装环节,而不是统一转成字符串。比如数组形式的包装内容即使能够被显示成文字,也仍需要先确认应如何组织package,不应直接把列表的表示形式塞进字段以消除type。数组作为根输入抛出record_must_be_object,则是整份输入的结构层级不对,不能把它误解成数组中的商品缺了某个字段;若来源提供的是多商品集合,应由调用层明确如何逐条交给本例,不能期待单对象诊断器自行展开。完整对象返回空列表时,编辑可确认这三个键的值已经满足形式要求,但仍要逐项核对用途:sku用于识别商品,name用于称呼商品,package承载包装说明,任意填入一个占位字符串并不等于资料准备完成。尤其package中的物件和数量应能回指已有资料,不能因为字段要求非空就补写未确认的配件。下一组测试宜让三个字段轮流承担missing、blank、type,保证错误分类不是只对某个示例字段有效;再分别用空字符串和仅空格的字符串检查空值边界,用null、数字、布尔值和对象检查类型边界。另可准备同时有两个缺口的对象,确认接收者能一次看到全部待补项目,而不会处理一个字段后才发现下一项。对非空但含义不明确的package,可设计人工核对样本,与机器检查通过的结果并列,突出字段齐全和描述可信是两个独立步骤。适合的交接节点是商品资料准备转为图片上的标题、卖点或包装模块之前:数据整理人员先修正结构与类型,商品资料负责人再补充实际内容,编辑最后决定如何引用。这样type可以追到数据组装,missing可以追到模板覆盖,blank可以追到未填写项,不必把所有错误都归给文案人员。报告应保留字段名和错误类别,让后续人知道为何暂缓某个信息模块,而不是用猜测文字填满版面后再回头追查来源。