大家好,感谢您阅读
我必须启动并运行一段我尚未编写的代码,这是我第一次使用python。该代码每天都在工作,以提取我们每天下载的一些气象数据。由于原始数据发生了一些变化,因此我不得不修改代码,基本上是更改一些ID以获取所需变量的新位置。
但是现在又出现了另一个问题,在循环中我收到了此错误消息
('XXX', 19, 368, 124, 130)
('YYY', 19, 368, 0.0, 130, 2.49e+19, 0.25)
('XXX', 20, 382, 124, 130)
('YYY', 20, 382, 0.0, 130, 2.55e+19, 0.0)
('XXX', 21, 398, 124, 130)
Traceback (most recent call last):
File "/home/meteo/UVI/TREBALL/input-make-erythem.py", line 125, in <module>
auxcm=float(lista[j][(auxcm+4):len(lista[j])])*28.9645*dens[i]/(6.023e17)
IndexError: list index out of range
XXX
和YYY
定位在代码中添加的打印语句的输出以查找错误。当读取dens [i]作为dens的第21个(也是最后一个)值时,似乎出现了问题。但是如何检查问题是来自dens[i]
还是len(lista[j])
我假设i
和j
都从0开始,并且循环应在完全读取dens[i]
之后结束。
出现问题的那段代码(我想)
alt=[16,14,12,10,9,8,7,6,5,4.5,4,3.5,3,2.5,2,1.5,1,0.75,0.5,0.25,0.0]
#1/cm3
dens=3.460E+18,4.74E+18,6.48E+18,8.59E+18,9.71E+18,1.09E+19,1.23E+19,1.37E+19,1.55E+19,1.64E+19,1.73E+19,1.81E+19,1.93E+19,1.97E+19,2.00E+19,2.15E+19,2.30E+19,2.36E+19,2.42E+19,2.49E+19,2.55E+19]
print("lenlista",len(lista))
for j in range(len(lista)):
auxcm=lista[j].find("CLWMR")
if -1 != auxcm:
auxcm=lista[j].find("val=")
print("XXX",i, j, auxcm, len(lista[j]))
auxcm=float(lista[j][(auxcm+4):len(lista[j])])*28.9645*dens[i]/(6.023e17)
print("YYY",i, j, auxcm, len(lista[j]),dens[i],alt[i])
cm.write(" "+str(alt[i])+" ")
cm.write(str(auxcm))
cm.write(" 10.0\n") #radio estandar de gota de nube en um (variacion de 2 um --> 5%)
i=i+1
len(lista) = 512
alt和dens有21个元素
预先感谢您的帮助
答案 0 :(得分:1)
我认为问题在于调用dens[i]
,因为此时i
为21,但是dens
的长度为21(除非我无法正确计数),因此索引超出范围,这就是错误IndexError: list index out of range
答案 1 :(得分:1)
%^^main%
显示什么?
很可能print("XXX",i, j, auxcm, len(lista[j]))
的值是问题的根源。如果i
中有超过21个可以找到“ CLWMR”的条目,则lista
的增量将破坏i
列表(即dens
将> = 21)
您可以通过在条件中添加i
来忽略多余的“ CLWMR”条目,或者通过添加另一个来表明错误并中断循环,将其报告为错误。
这也可能意味着您需要向dens / alt列表中添加更多条目,或者数据有缺陷。