本地运行正常的Python脚本在Github Actions中触发JSONDecodeError求助
问题排查与解决思路
1. API请求在Github Actions环境中未返回有效JSON
- 原因:Github Actions服务器IP可能被API服务商拦截,返回验证码页面、访问拒绝提示等非JSON内容;或是环境变量配置错误,请求参数/认证信息不正确,API返回错误页面而非JSON。
- 解决:
- 在脚本中临时添加调试代码,打印API返回的原始内容,确认响应格式:
response = requests.get(api_url, headers=headers) print("API返回原始内容:", response.text) data = response.json() - 检查Github Actions中配置的环境变量(如API密钥、token)是否与本地一致,必要时在YAML中添加步骤验证变量存在性(注意不要直接打印敏感信息)。
- 在脚本中临时添加调试代码,打印API返回的原始内容,确认响应格式:
2. 网络访问限制
- 原因:Github Actions运行环境的网络存在代理或防火墙限制,导致请求未成功获取数据,返回空内容或非JSON响应。
- 解决:
- 为请求添加超时设置,避免无限等待:
response = requests.get(api_url, headers=headers, timeout=10) - 确认目标API是否允许Github Actions IP段访问,必要时联系API服务商将相关IP加入白名单。
- 为请求添加超时设置,避免无限等待:
3. 依赖版本不一致
- 原因:本地
requests版本与Github Actions中安装的版本存在差异,部分旧版本对特定JSON格式兼容性较差,引发解析错误。 - 解决:
- 在项目根目录创建
requirements.txt文件,明确指定与本地一致的requests版本:requests==2.31.0 - 在Github Actions的YAML配置中,通过
pip install -r requirements.txt安装依赖,确保版本统一。
- 在项目根目录创建
4. 响应编码不匹配
- 原因:API返回内容的编码与
requests默认解析编码不一致(比如返回GBK编码但默认用UTF-8解析),导致JSON解析失败。 - 解决:
- 手动指定响应编码后再解析:
response.encoding = 'gbk' # 根据API实际返回编码调整 data = response.json() - 或直接解码响应字节内容:
import json data = json.loads(response.content.decode('gbk'))
- 手动指定响应编码后再解析:
内容的提问来源于stack exchange,提问作者SOK
相关产品推荐
相关产品推荐

