代码中传入经纬度调用NSRDB API报错问题求助
pvlib get_psm3 接口调用报错排查
问题现象
调用pvlib.iotools.get_psm3()从NSRDB数据库获取TMY太阳资源数据时,通过Streamlit的st.number_input组件传入经纬度参数触发报错,把经纬度硬编码为固定数值时代码可正常运行。
问题代码
NREL_API_KEY = '{{API_KEY' lat1=st.number_input('Insert the Latitude:',value=52.4830986) lon1=st.number_input('Insert the Longitude:',value=13.4920913) metadata = pvlib.iotools.get_psm3( latitude=lat1, longitude=lon1, api_key=NREL_API_KEY, email='abc.xyz@gmail.com', names='tmy') st.write(metadata)
报错信息
HTTPError: ['No data available at the provided location', 'Data processing failure.']
Traceback:
File "C:\Users\amrit\anaconda3\lib\site-packages\streamlit\script_runner.py", line 430, in _run_script
exec(code, module.dict)
File "C:\Users\amrit\Desktop\python\tracker\tilt_compare.py", line 148, in
metadata = pvlib.iotools.get_psm3(
File "C:\Users\amrit\anaconda3\lib\site-packages\pvlib\iotools\psm3.py", line 166, in get_psm3
raise requests.HTTPError(errors, response=response)
故障原因
- 核心问题是参数类型不匹配:
st.number_input在部分版本下返回的是numpy.float64类型,而非Python原生float类型。requests库构造HTTP请求参数时,对numpy浮点类型的序列化存在兼容问题,会出现精度异常、格式错误,最终传给NSRDB服务端的经纬度坐标和实际输入值存在偏差,落在数据库无覆盖的区域,触发无数据报错。 - 代码里的
NREL_API_KEY = '{{API_KEY'存在书写错误,多了一个左大括号且缺少右闭合,正式运行时必须替换为自己申请的真实NREL API Key,否则也会触发鉴权类报错。 - 额外注意:
get_psm3方法默认返回元数据、逐小时气象数据两个对象,原代码只接收一个返回值,后续取资源数据时也会触发异常。
修复方法
传入经纬度前显式转换为Python原生float类型,同时修正API Key书写、补全返回值接收即可,修改后代码如下:
# 替换为自己申请的真实NREL API Key,移除多余的大括号 NREL_API_KEY = '填写你的真实NREL API密钥' lat1 = st.number_input('Insert the Latitude:', value=52.4830986) lon1 = st.number_input('Insert the Longitude:', value=13.4920913) # 显式将经纬度转为原生float类型,同时接收两个返回值 metadata, tmy_data = pvlib.iotools.get_psm3( latitude=float(lat1), longitude=float(lon1), api_key=NREL_API_KEY, email='abc.xyz@gmail.com', names='tmy', map_variables=True ) st.write('站点元数据:', metadata) st.write('TMY数据:', tmy_data)
内容的提问来源于stack exchange,提问作者pvrepy
相关产品推荐
相关产品推荐

