You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PVGIS气象数据报错(气团天顶角转换问题?)

问题:使用pvlib ModelChain处理气象数据时触发TypeError报错

尝试通过get_pvgis_tmy()获取气象文件运行ModelChain模型,或使用自有EPW文件经iotools工具处理后,均出现相同的气象数据相关报错。

复现代码

latitude = 53.951
longitude = -1.124
location = pvlib.location.Location(latitude, longitude)

weather, months, inputs, metadata = pvlib.iotools.get_pvgis_tmy(latitude, longitude, outputformat='epw', coerce_year=2023)

sandia_modules = pvlib.pvsystem.retrieve_sam("SandiaMod")
cec_inverters = pvlib.pvsystem.retrieve_sam("cecinverter")

system_loss = 0.1
times = weather.index
solar_position = pvlib.solarposition.get_solarposition(times, latitude, longitude)

system = pvlib.pvsystem.PVSystem(
    surface_tilt=30,
    surface_azimuth=150,
    module_parameters=sandia_modules["Canadian_Solar_CS6X_300M__2013"],
    inverter_parameters=cec_inverters["ABB__MICRO_0_25_I_OUTD_US_208__208V"],
    temperature_model_parameters=pvlib.temperature.TEMPERATURE_MODEL_PARAMETERS["sapm"]["open_rack_glass_glass"],
)

mc = pvlib.modelchain.ModelChain(system, location=location)
mc.prepare_inputs(weather)

报错信息

---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)
AttributeError: 'float' object has no attribute 'radians'

The above exception was the direct cause of the following exception:

TypeError                                 Traceback (most recent call last)
Cell In[6], line 23
21 mc = pvlib.modelchain.ModelChain(system, location=location)
22 print(mc)
---> 23 mc.prepare_inputs(weather)
24 # # mc.run_model(weather)
25
26 # ac_power = mc.ac * (1 - system_loss)
27 # dc_power = mc.dc['p_mp']  # Maximum power point (Pmp)
28
29 # print(dc_power)

1421 self._assign_weather(weather)
1423 self._prep_inputs_solar_pos(weather)
---> 1424 self._prep_inputs_airmass()
1425 self._prep_inputs_albedo(weather)
1426 self._prep_inputs_fixed()

1251 def _prep_inputs_airmass(self):
1252     """
1253     Assign airmass
1254     """
---> 1255 self.results.airmass = self.location.get_airmass(
1256         solar_position=self.results.solar_position,
1257         model=self.airmass_model)
1258     return self

316 else:
317     raise ValueError(f'{model} is not a valid airmass model')
---> 319 airmass_relative = atmosphere.get_relative_airmass(zenith, model)
321 pressure = atmosphere.alt2pres(self.altitude)
322 airmass_absolute = atmosphere.get_absolute_airmass(airmass_relative,
323                                                    pressure)

217 # set zenith values greater than 90 to nans
218 z = np.where(zenith > 90, np.nan, zenith)
---> 219 zenith_rad = np.radians(z)
221 model = model.lower()
223 if 'kastenyoung1989' == model:

TypeError: loop of ufunc does not support argument 0 of type float which has no callable radians method

pvlib版本:0.11.2

解决方案

这个报错是pvlib 0.11.2版本中的已知bug,后续版本已修复。解决方法如下:

  • 升级pvlib版本:将pvlib升级到0.12.0及以上版本,即可解决该类型错误。
  • 额外优化:代码中手动计算的solar_position并未传入ModelChain,ModelChain会自动计算太阳位置,可删除该行冗余代码,避免潜在冲突。

内容的提问来源于stack exchange,提问作者Expeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:19:59