You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:15:03