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
相关产品推荐
相关产品推荐

