使用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
相关产品推荐
相关产品推荐

