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

解析JSON提取meta.total字段时出现ERROR - 'meta'报错排查

报错原因

你看到的ERROR - 'meta'是日志封装后输出的Python KeyError,触发点在tt = totals['meta']['total']这行的totals['meta']取值环节——代表totals(也就是接口响应解析后得到的字典)的顶级键里根本不存在meta字段,核心问题是你预设的JSON返回结构和接口实际返回的结构不一致,常见触发场景:

  • 接口请求未成功:比如权限校验失败、传参错误、服务端异常时,接口会返回仅包含错误码、错误描述的JSON,不会返回droplets、meta这类正常业务字段
  • 返回结构存在外层嵌套:比如真实返回结构是{"code": 0, "data": {"droplets": [], "meta": {"total": 3}}}这类带通用外层包装的格式,你直接在最外层查找meta自然匹配不到
  • 注意:如果是JSON本身格式错误(比如你粘贴的示例末尾缺失闭合}的问题),.json()方法会直接抛出JSON解析异常,不会触发当前的KeyError,这部分是你贴示例时的笔误,不是本次报错的诱因
修复方案
  1. 第一步先打印真实响应内容,不要靠预设结构写代码,先执行以下代码确认实际返回:
print("请求状态码:", droplet_response.status_code)
print("响应原始内容:", droplet_response.text)
totals = droplet_response.json()
print("解析后字典的所有顶级键:", list(totals.keys()))
  1. 确认真实结构后,按以下逻辑优化代码,增加异常判断,避免直接取值触发崩溃:
# 先校验HTTP请求是否成功
if droplet_response.status_code != 200:
    print(f"接口请求失败,状态码:{droplet_response.status_code},返回:{droplet_response.text}")
    # 此处补充错误处理逻辑,比如重试、抛出业务异常
else:
    resp_data = droplet_response.json()
    # 按真实嵌套层级取值,比如如果meta在外层data下,就改为resp_data.get('data', {}).get('meta', {}).get('total')
    meta_info = resp_data.get('meta', {})
    total = meta_info.get('total')
    if total is not None:
        tt = total
        print(f"成功获取total值:{tt}")
    else:
        print(f"未找到meta.total字段,当前响应顶级键为:{list(resp_data.keys())}")

用dict.get()方法取值比直接用[]取值更稳妥,键不存在时会返回你设置的默认值(这里设置为空字典/None),不会直接抛出KeyError中断程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:01:14