← 全部文章

技术与生活 / 一篇记录

字典里没有这个键,和它的值为空不同

配置合并、接口响应和可选字段经常需要区分这两种状态。get 返回 None 时,单凭结果无法知道是键缺失还是显式设置为空,因此条件设计要先确定语义。

键不存在与键的值为 None 是不同状态,接口设计应明确区分。

实际怎么检查

以下示例使用 Python 3,文件路径和输入值均为练习样本。

data = {'name': None}
print('name' in data, data.get('name'))

比较缺失键、空字符串和 None 三种情况。

遇到异常再检查什么

如果必须区分,可先用 in 检查,或使用独立哨兵对象作为默认值。不要用简单真假判断代替存在性判断,否则零、False 和空字符串也会被误判。

哨兵对象适合表达“未提供”,因为它与任何合法输入都不相等。使用时比较对象身份即可,不必选择一个可能恰好出现在业务数据里的特殊字符串作为缺失标记。

使用 get 的默认值时,要确认默认值不会掩盖输入错误。

参考:Python 文档。

搜索文章

输入关键词,找回一篇记录。