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

Python脚本调用API遇KeyError:缺失JSON字段时如何跳过或显示无信息?

解决JSON字段缺失触发KeyError的问题

针对你脚本里API返回JSON字段时有时无导致报错的情况,这里提供两种解决方案,分别对应「显示‘no info’」和「跳过缺失内容」的需求:

方案一:缺失字段显示「no info」

这种方案下,不管字段是否存在,都会显示对应的标签,缺失时用「no info」填充内容:

data = {'name': 'Kev', 'connected': 'ONLINE', 'time': '2024-03-03T23:01:00Z', 'up-loader': [{'uploaded': 'Yes', 'upload-time': '2024-03-03T18:01:00Z'}]}

# 必选字段直接获取(确保API一定会返回)
InfoNAME = data["name"]
InfoCONN = data["connected"]
InfoTIME = data["time"]

# 可选字段用get方法处理,避免KeyError,缺失时返回默认值'no info'
# 先获取up-loader列表,不存在则返回空列表
up_loader_list = data.get('up-loader', [])
# 列表不为空则取第一个元素,否则用空字典
up_loader_item = up_loader_list[0] if up_loader_list else {}
# 从字典中取值,缺失时返回'no info'
InfoUPLOAD = up_loader_item.get('uploaded', 'no info')
InfoUPTIME = up_loader_item.get('upload-time', 'no info')

# 更新文本框内容
text_box.delete('1.0', END)   
# 插入必选信息(加换行让内容更清晰)
text_box.insert(END, "Name:  ")
text_box.insert(END, InfoNAME + "\n")
text_box.insert(END, "Status: ")
text_box.insert(END, InfoCONN + "\n")
text_box.insert(END, "Last Online: ")
text_box.insert(END, InfoTIME + "\n")
# 插入上传相关信息(缺失时显示no info)
text_box.insert(END, "Was there an upload: ")  
text_box.insert(END, InfoUPLOAD + "\n")
text_box.insert(END, "When was the upload: ")
text_box.insert(END, InfoUPTIME + "\n")

关键修改点:

  • 用data.get('up-loader', [])替代直接data['up-loader'],字段缺失时返回空列表,避免KeyError
  • 先判断列表是否为空,再取第一个元素,防止空列表索引报错
  • 用up_loader_item.get('字段名', 'no info')获取嵌套字段,缺失时返回指定默认值

方案二:缺失字段直接跳过显示

如果希望完全不显示缺失字段的相关行,可以加条件判断:

data = {'name': 'Kev', 'connected': 'ONLINE', 'time': '2024-03-03T23:01:00Z', 'up-loader': [{'uploaded': 'Yes', 'upload-time': '2024-03-03T18:01:00Z'}]}

# 必选字段获取
InfoNAME = data["name"]
InfoCONN = data["connected"]
InfoTIME = data["time"]

# 初始化上传相关变量为None
InfoUPLOAD = None
InfoUPTIME = None

# 检查up-loader字段是否存在且不为空
if 'up-loader' in data and len(data['up-loader']) > 0:
    up_loader_item = data['up-loader'][0]
    # 检查子字段是否存在
    if 'uploaded' in up_loader_item:
        InfoUPLOAD = up_loader_item['uploaded']
    if 'upload-time' in up_loader_item:
        InfoUPTIME = up_loader_item['upload-time']

# 更新文本框内容
text_box.delete('1.0', END)   
# 插入必选信息(加换行让内容更清晰)
text_box.insert(END, "Name:  ")
text_box.insert(END, InfoNAME + "\n")
text_box.insert(END, "Status: ")
text_box.insert(END, InfoCONN + "\n")
text_box.insert(END, "Last Online: ")
text_box.insert(END, InfoTIME + "\n")
# 仅当字段存在时插入对应内容
if InfoUPLOAD is not None:
    text_box.insert(END, "Was there an upload: ")  
    text_box.insert(END, InfoUPLOAD + "\n")
if InfoUPTIME is not None:
    text_box.insert(END, "When was the upload: ")
    text_box.insert(END, InfoUPTIME + "\n")

关键修改点:

  • 用'字段名' in 字典判断字段是否存在,避免直接索引报错
  • 对嵌套的列表和字段逐层检查,确保每一步都安全
  • 通过变量是否为None来决定是否插入对应的文本行

内容的提问来源于stack exchange,提问作者CantCode2SaveHerself

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:13:15