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

Python Flask调用API解析JSON时出现gym_dict['businesses']键错误

问题原因
  • 动态参数异常:独立运行时parameters、resp_header等参数为固定有效值,移入Flask路由后,'some random params'部分一般是从用户请求中动态获取参数,若参数为空、格式错误,会导致第三方API返回报错结构,不存在businesses字段。
  • 响应状态异常:独立运行时未做状态码校验刚好请求成功,Flask运行场景下可能触发第三方API限流、鉴权失败,返回4xx/5xx错误响应,对应的JSON结构为错误提示,无businesses字段。
  • 网络环境差异:独立运行的网络环境可正常访问目标API,Flask服务所在环境存在代理、防火墙限制,请求实际拿到的是网络错误页面,转为JSON后结构不符合预期。
  • 变量作用域问题:如果end_point、resp_header为全局变量,Flask多线程运行时可能被其他请求修改,导致请求地址或请求头错误,拿到异常响应。
解决方案
  • 新增响应状态校验,拿到请求结果先判断状态码,同时打印完整返回内容排查问题:
response = requests.get(url=end_point, params=parameters, headers=resp_header)
# 先校验状态码
if response.status_code != 200:
    print(f"请求失败,状态码:{response.status_code},返回内容:{response.text}")
    return "第三方接口请求失败"
gym_dict = response.json()
  • 新增字段存在性判断,不要直接硬取Key,使用get方法兜底:
# 替代直接写gym_dict['businesses']
business_list = gym_dict.get('businesses', [])
if not business_list:
    print(f"返回结构异常,无businesses字段,完整返回:{gym_dict}")
    return "暂无数据"
for valg in business_list:
    # 原有业务逻辑
  • 校验动态参数合法性:路由中如果从用户请求获取参数(如GET请求的查询参数、POST请求的表单参数),先做判空、格式校验,确保传给第三方API的参数和独立运行时的参数一致。
  • 固定配置变量:把end_point、固定请求头等配置存入Flask的config对象中,避免运行时被修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:39:01