Python过滤布尔值False时赋值失效问题的排查与解决
list_operations函数过滤
done=False时失效的问题修复 问题现象
- 实现了Python函数
list_operations,用于从API端点拉取操作列表,支持通过filter参数对结果进行过滤 - 调用
list_operations(filter='done=True')时过滤功能正常,但调用list_operations(filter='done=False')时,即便API返回的操作条目里done字段值为False,过滤也无法生效,调试发现item_value始终是完整的操作字典,没有被正确处理
问题根源
问题出在判断字典键是否存在的代码逻辑:
- 原代码使用
if item_value.get(filter_el)来判断键是否存在,当键对应的值是False时,get方法返回的False会被if语句判定为“假”,误判成键不存在,导致后续赋值逻辑不执行 - 正确的键存在性判断应该使用
if filter_el in item_value,这个方式仅检查键是否存在于字典中,不会受对应值的布尔属性影响
修复代码
将判断键存在的代码段:
# 错误写法 if item_value.get(filter_el): item_value = item_value[filter_el]
替换为:
# 正确写法 if filter_el in item_value: item_value = item_value[filter_el]
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

