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

Python解析JSON取值时触发KeyError 'response'报错如何解决

KeyError: 'response' 排查与解决方法

首先明确:不存在「新版本JSON索引取值规则变更」的可能,Python字典取值逻辑、标准库JSON解析规则是长期稳定的,该异常100%是你实际拿到的json_here_response对象结构和你写的链式取值路径不匹配导致的。

定位步骤

  • 第一步先确认顶层结构:执行print(list(json_here_response.keys()))打印当前返回对象的所有顶层键,首先确认是否存在response键。
    绝大多数场景下缺失response是因为接口返回了错误结构:比如鉴权失败、参数非法、配额耗尽、服务端内部错误时,返回的结构通常是{"error": "xxx", "error_description": "xxx"}格式,根本不包含业务返回的response字段。
  • 第二步逐层校验嵌套结构:就算response字段存在,你写的长链式取值['response']['route'][0]['leg'][0]['link'][0]['functionalClass']里任意一层缺键、或者数组为空,都会触发报错(数组为空时取[0]会触发IndexError),不要默认所有层级的字段、数组都一定存在。

修复方案

  • 先处理接口异常分支:在解析业务字段前,先判断返回结构是否符合预期
    if 'response' not in json_here_response:
        # 打印完整返回内容排查接口错误,比如看返回的error字段信息
        print("接口返回异常结构:", json_here_response)
        # 这里可以加错误处理逻辑,比如抛出明确异常、重试请求等
        return
    
  • 替换硬编码链式取值为安全逐层取值,避免单节点结构异常直接中断程序:
    # 每层都设置空默认值,缺失时不会抛KeyError
    response_data = json_here_response.get('response', {})
    route_list = response_data.get('route', [])
    functional_class = None
    
    if route_list:
        first_route = route_list[0]
        leg_list = first_route.get('leg', [])
        if leg_list:
            first_leg = leg_list[0]
            link_list = first_leg.get('link', [])
            if link_list:
                first_link = link_list[0]
                functional_class = first_link.get('functionalClass')
    
    if functional_class is not None:
        street_info.append(functional_class)
    
  • 如果确认是API版本升级导致返回结构变化,对照你打印出来的实际JSON结构,调整字段取值的路径即可。

调试阶段一定要打印完整的原始返回内容,不要靠猜接口返回结构,服务端返回的错误信息通常会直接写明问题原因,能省很多排查时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:18:20