Python访问列表内字典的动态可选键出现KeyError该如何解决
报错原因
你遇到的KeyError是因为直接通过字典[键名]的方式访问字典中不存在的键时,Python会主动抛出该异常。你定义的Responses列表中,Id是所有字典的共有字段,但ResponseText1、ResponseText2是可选字段,部分字典不包含这两个键,直接访问就会触发报错。
此外你原有代码的判断逻辑存在隐含缺陷:就算对应键存在,如果值是空字符串、False、0等布尔值为假的内容,也会被误判为字段不存在,不符合你识别可选字段的需求。
修复方案
方案1:使用dict.get()方法(最推荐,写法简洁)
字典内置的get()方法可以指定键不存在时返回的默认值,不会抛出异常,你可以根据业务需要调整判断逻辑:
for j in Responses: print(j['Id']) # 键不存在时默认返回None text1 = j.get('ResponseText1') # 若只要键存在就输出,不管值是否为空,用if text1 is not None判断 # 若需要键存在且值非空才输出,用if text1判断即可 if text1 is not None: print(text1) else: print("No ResponseText1 is present") text2 = j.get('ResponseText2') if text2 is not None: print(text2) else: print("No ResponseText2 is present")
方案2:先判断键是否存在再访问
你也可以先用in运算符判断键是否在字典中,再执行取值操作,适合需要严格区分「键不存在」和「键存在但值为空」的场景:
for j in Responses: print(j['Id']) if 'ResponseText1' in j: print(j['ResponseText1']) else: print("No ResponseText1 is present") if 'ResponseText2' in j: print(j['ResponseText2']) else: print("No ResponseText2 is present")
内容的提问来源于stack exchange,提问作者Kanchon Gharami
相关产品推荐
相关产品推荐

