英文:
cdsapi error while trying to download era5 data using python script
问题
你正在尝试使用CDS API下载ERA5最佳路径数据(每小时,单层),但遇到了一些错误。以下是您提供的脚本和错误信息:
脚本部分:
import cdsapi
import numpy
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
c = cdsapi.Client()
# Request parameters
for year in range(1945, 2022):
c.retrieve(
'reanalysis-era5-single-levels',
{
'variable': 'total_precipitation',
'format': 'netcdf',
'year': str(year),
'month': [
'01', '02', '03',
'04', '05', '06',
'07', '08', '09',
'10', '11', '12',
],
'day': [
'01', '02', '03',
'04', '05', '06',
'07', '08', '09',
'10', '11', '12',
'13', '14', '15',
'16', '17', '18',
'19', '20', '21',
'22', '23', '24',
'25', '26', '27',
'28', '29', '30',
'31',
],
'time': [
'00:00', '01:00', '02:00',
'03:00', '04:00', '05:00',
'06:00', '07:00', '08:00',
'09:00', '10:00', '11:00',
'12:00', '13:00', '14:00',
'15:00', '16:00', '17:00',
'18:00', '19:00', '20:00',
'21:00', '22:00', '23:00',
],
'area': [90, -180, -90, 180], # 全球范围
},
f'era5_{year}_precipitation.nc',
)
错误信息部分:
2023-05-14 17:42:20,413 INFO 欢迎使用CDS
2023-05-14 17:42:20,414 INFO 发送请求至https://cds.climate.copernicus.eu/api/v2/resources/reanalysis-era5-single-levels
2023-05-14 17:42:20,702 INFO 请求已排队
2023-05-14 17:42:21,986 INFO 请求失败
2023-05-14 17:42:21,986 ERROR 消息:您提交的请求无效
2023-05-14 17:42:21,986 ERROR 原因:Mars服务器任务以错误完成;UserError:月份重复值:1945-01 [mars];错误代码为-2;请求失败;报告了一些错误(最后一个错误为-2)
...(更多错误信息)
您想知道如何在没有这些错误的情况下下载数据。
英文:
I'm trying to download ERA5 best-track data (hourly, single level) with CDS API.
I'm totally new to get this kind of dataset, so I've running into bunch of errors like this.
This is the script:
import cdsapi
import numpy
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
c = cdsapi.Client()
# Request parameters
for year in range(1945, 2022):
c.retrieve(
'reanalysis-era5-single-levels',
{
'variable': 'total_precipitation',
'format': 'netcdf',
'year': str(year),
'month': [
'01', '02', '03',
'04', '05', '06',
'07', '08', '09',
'10', '11', '12',
],
'day': [
'01', '02', '03',
'04', '05', '06',
'07', '08', '09',
'10', '11', '12',
'13', '14', '15',
'16', '17', '18',
'19', '20', '21',
'22', '23', '24',
'25', '26', '27',
'28', '29', '30',
'31',
],
'time': [
'00:00', '01:00', '02:00',
'03:00', '04:00', '05:00',
'06:00', '07:00', '08:00',
'09:00', '10:00', '11:00',
'12:00', '13:00', '14:00',
'15:00', '16:00', '17:00',
'18:00', '19:00', '20:00',
'21:00', '22:00', '23:00',
],
'area': [90, -180, -90, 180], # Global
},
f'era5_{year}_precipitation.nc',
)
And getting same error like this.
2023-05-14 17:42:20,413 INFO Welcome to the CDS
2023-05-14 17:42:20,414 INFO Sending request to https://cds.climate.copernicus.eu/api/v2/resources/reanalysis-era5-single-levels
2023-05-14 17:42:20,702 INFO Request is queued
2023-05-14 17:42:21,986 INFO Request is failed
2023-05-14 17:42:21,986 ERROR Message: the request you have submitted is not valid
2023-05-14 17:42:21,986 ERROR Reason: Mars server task finished in error; UserError: Duplicate value for month: 1945-01 [mars]; Error code is -2; Request failed; Some errors reported (last error -2)
2023-05-14 17:42:21,986 ERROR Traceback (most recent call last):
2023-05-14 17:42:21,986 ERROR File "/opt/cdstoolbox/cdscompute/cdscompute/cdshandlers/services/handler.py", line 59, in handle_request
2023-05-14 17:42:21,986 ERROR result = cached(context.method, proc, context, context.args, context.kwargs)
2023-05-14 17:42:21,986 ERROR File "/opt/cdstoolbox/cdscompute/cdscompute/caching.py", line 108, in cached
2023-05-14 17:42:21,986 ERROR result = proc(context, *context.args, **context.kwargs)
2023-05-14 17:42:21,986 ERROR File "/opt/cdstoolbox/cdscompute/cdscompute/services.py", line 124, in __call__
2023-05-14 17:42:21,986 ERROR return p(*args, **kwargs)
2023-05-14 17:42:21,987 ERROR File "/opt/cdstoolbox/cdscompute/cdscompute/services.py", line 60, in __call__
2023-05-14 17:42:21,987 ERROR return self.proc(context, *args, **kwargs)
2023-05-14 17:42:21,987 ERROR File "/home/cds/cdsservices/services/mars/mars.py", line 48, in internal
2023-05-14 17:42:21,987 ERROR return mars(context, request, **kwargs)
2023-05-14 17:42:21,987 ERROR File "/home/cds/cdsservices/services/mars/mars.py", line 20, in mars
2023-05-14 17:42:21,987 ERROR execute_mars(context, requests, info)
2023-05-14 17:42:21,987 ERROR File "/home/cds/cdsservices/services/mars/execute_mars.py", line 20, in execute_mars
2023-05-14 17:42:21,987 ERROR exception=MarsException)
2023-05-14 17:42:21,987 ERROR File "/opt/cdstoolbox/cdscompute/cdscompute/context.py", line 209, in run_command
2023-05-14 17:42:21,987 ERROR raise exception(call, proc.returncode, output)
2023-05-14 17:42:21,987 ERROR home.cds.cdsservices.services.mars.__init__.py.exceptions.MarsException: Mars server task finished in error; UserError: Duplicate value for month: 1945-01 [mars]; Error code is -2; Request failed; Some errors reported (last error -2)
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
~/RSCH/Globe/data2/ERA5_rainfall.py in <module>
9 # Request parameters
10 for year in range(1945, 2022):
---> 11 c.retrieve(
12 'reanalysis-era5-single-levels',
13 {
/usr/local/miniconda3/lib/python3.8/site-packages/cdsapi/api.py in retrieve(self, name, request, target)
346
347 def retrieve(self, name, request, target=None):
--> 348 result = self._api("%s/resources/%s" % (self.url, name), request, "POST")
349 if target is not None:
350 result.download(target)
/usr/local/miniconda3/lib/python3.8/site-packages/cdsapi/api.py in _api(self, url, request, method)
504 break
505 self.error(" %s", n)
--> 506 raise Exception(
507 "%s. %s."
508 % (reply["error"].get("message"), reply["error"].get("reason"))
Exception: the request you have submitted is not valid. Mars server task finished in error; UserError: Duplicate value for month: 1945-01 [mars]; Error code is -2; Request failed; Some errors reported (last error -2).
I really don't know what the problem is here. How can I download the data without this error?
答案1
得分: 1
你在调用中没有定义产品类型。添加这一部分应该可以解决问题,至少对我来说是这样的:
for year in range(1945, 2022):
c.retrieve(
'reanalysis-era5-single-levels',
{
'product_type': 'reanalysis',
'variable': 'total_precipitation',
'format': 'netcdf',
'year': str(year),
'month': [
'01', '02', '03',
'04', '05', '06',
'07', '08', '09',
'10', '11', '12',
],
'day': [
'01', '02', '03',
'04', '05', '06',
'07', '08', '09',
'10', '11', '12',
'13', '14', '15',
'16', '17', '18',
'19', '20', '21',
'22', '23', '24',
'25', '26', '27',
'28', '29', '30',
'31',
],
'time': [
'00:00', '01:00', '02:00',
'03:00', '04:00', '05:00',
'06:00', '07:00', '08:00',
'09:00', '10:00', '11:00',
'12:00', '13:00', '14:00',
'15:00', '16:00', '17:00',
'18:00', '19:00', '20:00',
'21:00', '22:00', '23:00',
],
'area': [90, -180, -90, 180], # 全球范围
},
f'era5_{year}_precipitation.nc',
)
英文:
You have not defined the product type in your call. Adding it in should work, at least it does for me:
for year in range(1945, 2022):
c.retrieve(
'reanalysis-era5-single-levels',
{
'product_type': 'reanalysis',
'variable': 'total_precipitation',
'format': 'netcdf',
'year': str(year),
'month': [
'01', '02', '03',
'04', '05', '06',
'07', '08', '09',
'10', '11', '12',
],
'day': [
'01', '02', '03',
'04', '05', '06',
'07', '08', '09',
'10', '11', '12',
'13', '14', '15',
'16', '17', '18',
'19', '20', '21',
'22', '23', '24',
'25', '26', '27',
'28', '29', '30',
'31',
],
'time': [
'00:00', '01:00', '02:00',
'03:00', '04:00', '05:00',
'06:00', '07:00', '08:00',
'09:00', '10:00', '11:00',
'12:00', '13:00', '14:00',
'15:00', '16:00', '17:00',
'18:00', '19:00', '20:00',
'21:00', '22:00', '23:00',
],
'area': [90, -180, -90, 180], # Global
},
f'era5_{year}_precipitation.nc',
)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论