执行CMIP6气候数据下载时遇HTTPError 400 TypeError问题求助
解决CMIP6数据下载时的TypeError/400 Bad Request错误
问题场景
运行CMIP6历史时段(1850-2014)近地面气温月数据下载代码时,触发以下错误:
HTTPError: 400 Client Error: Bad Request for url: https://cds.climate.copernicus.eu/api/retrieve/v1/jobs/e7166a79-07b5-4ad4-a212-cd1edae53b60/results
The job has failed
The job failed with: TypeError
此前参考教程中的代码可正常运行,当前代码如下:
# DOWNLOAD DATA FOR HISTORICAL PERIOD c = cdsapi.Client(url=URL, key=KEY) for j in models: c.retrieve( 'projections-cmip6', { 'download_format': 'zip', 'data_format': 'netcdf_legacy', 'temporal_resolution': 'monthly', 'experiment': 'historical', 'level': 'single_levels', 'variable': 'near_surface_air_temperature', 'model': f'{j}', 'date': '1850-01-01/2014-12-31', }, f'{DATADIR}cmip6_monthly_1850-2014_historical_{j}.zip')
排查与解决方案
检查
models列表有效性- 确认列表中每个模型名称为CDS官方支持的有效值,避免拼写错误或选择了无对应数据的模型(比如部分模型的historical实验可能没有月尺度近地面气温数据)。可先单独测试一个已知可用的模型(如
MPI-ESM1-2-LR),验证请求是否正常。 - 确保
models列表不为空,且所有元素均为字符串类型,避免f'{j}'格式转换时触发TypeError。
- 确认列表中每个模型名称为CDS官方支持的有效值,避免拼写错误或选择了无对应数据的模型(比如部分模型的historical实验可能没有月尺度近地面气温数据)。可先单独测试一个已知可用的模型(如
验证
DATADIR路径
确保DATADIR是存在的有效目录,且路径末尾带有斜杠(如./downloads/),否则生成的文件名会出现路径拼接错误。可通过打印f'{DATADIR}cmip6_monthly_1850-2014_historical_{j}.zip'确认输出的文件路径是否正确。调整CDS客户端配置
- 确认
KEY未过期,可在CDS用户页面重新获取有效密钥。 - 尝试省略
url参数,使用默认CDS API地址初始化客户端:c = cdsapi.Client(key=KEY),避免自定义URL配置错误。
- 确认
优化请求参数
- 部分模型可能不支持
netcdf_legacy格式,可尝试移除data_format参数或替换为netcdf。 - 拆分
date参数为start_date和end_date(如'start_date': '1850-01-01', 'end_date': '2014-12-31'),部分API版本对参数格式有更严格要求。
- 部分模型可能不支持
单次请求调试
注释循环代码,单独请求单个模型,排除循环逻辑带来的问题,示例代码:c = cdsapi.Client(key=KEY) c.retrieve( 'projections-cmip6', { 'download_format': 'zip', 'data_format': 'netcdf_legacy', 'temporal_resolution': 'monthly', 'experiment': 'historical', 'level': 'single_levels', 'variable': 'near_surface_air_temperature', 'model': 'MPI-ESM1-2-LR', 'date': '1850-01-01/2014-12-31', }, './cmip6_test.zip')
内容的提问来源于stack exchange,提问作者climateresearcher567
相关产品推荐
相关产品推荐

