【发布时间】:2020-10-05 21:18:30
【问题描述】:
我正在使用一个名为 pvmismatch 的库,它可以测量不完美阴影对太阳能电池的影响,我认为它很快就会与 pvlib 兼容。我不确定这是一个与 python 相关的问题,还是与库相关的问题,但可能是前者。
我想创建一个函数,该函数接受使用“setSuns”的“阴影”列表以及要为哪些单元格着色的索引。我的代码如下:
def shade_into_powers(shades_list = [], temperatures_list = [], cells_list = []):
length_of_lists = len(shades_list)
list_of_powers = []
for i in range(0, length_of_lists):
my_module_shaded.setSuns(Ee = shades_list[i], cells = cells_list[i])
my_module_shaded.setTemps(Tc=temperatures_list[i], cells= cells_list[i])
list_of_powers[i] = my_module_shaded.pvcells[i].Igen*max(my_module_shaded.pvcells[i].Vcell)
return list_of_powers
我后来尝试了这个功能如下:
shadez = [0.43, 0.43, 0.43]
tempez = [88, 81, 77]
cellz = [30, 31, 32]
powers_listed = shade_into_powers(shadez, tempez, cellz)
我得到的错误是“'int' 类型的对象不可迭代”。我在这里做错了什么?
感谢所有帮助。
下面是TraceBack:
Traceback (most recent call last):
File "/home/abed/.config/JetBrains/PyCharmCE2020.2/scratches/scratch_2.py", line 176, in <module>
powers_listed = shade_into_powers(shadez, tempez, cellz)
File "/home/abed/.config/JetBrains/PyCharmCE2020.2/scratches/scratch_2.py", line 168, in shade_into_powers
my_module_shaded.setSuns(Ee = shades_list[i], cells = cells_list[i])
File "/home/abed/.local/lib/python3.7/site-packages/pvmismatch/pvmismatch_lib/pvmodule.py", line 323, in setSuns
cells_to_update = [self.pvcells[i] for i in cells]
TypeError: 'int' object is not iterable
【问题讨论】:
-
跟踪的确切错误是什么?
-
另请注意,将列表作为默认参数 (
shades_list = []) 通常是 bad idea。 -
谢谢@Carcigenicate。我已经添加了 TraceBack。真的,我别无选择,只能在这种情况下使用列表。
-
您可以使用列表,但设置默认参数
None,然后在函数内部分配列表,如果它是None。不幸的是,这个错误似乎是特定于库的,所以我帮不上什么忙。绝对修复默认参数。这会在某个时候咬你(它在某个时候咬每个人)。有关我提到的修复的更好描述,请参阅链接。 -
再次查看错误,
cells= cells_list[i]在对setSuns和setTemps的调用中应该是cells= cells_list。注意参数是“cells”(复数),而不是“cell”
标签: python python-3.x pvlib