索引超出范围(python if循环)

时间:2019-08-13 20:38:21

标签: python loops

大家好,感谢您阅读

我必须启动并运行一段我尚未编写的代码,这是我第一次使用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

XXXYYY定位在代码中添加的打印语句的输出以查找错误。当读取dens [i]作为dens的第21个(也是最后一个)值时,似乎出现了问题。但是如何检查问题是来自dens[i]还是len(lista[j])

我假设ij都从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个元素

预先感谢您的帮助

2 个答案:

答案 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列表中添加更多条目,或者数据有缺陷。