无法解决“列表索引超出范围”错误

时间:2015-02-25 18:57:20

标签: python indexoutofboundsexception

我无法解决'列表索引超出范围'错误。代码似乎运行正常,直到file_no2 = line2.split()[0]生成索引错误的某个点。错误在正在读取的文件结束之前显示70行,因此我无法确定为什么会出现“列表索引超出范围错误”。我试图遍历文件,直到line2被文件中的最后一行数据填充,所以我使用range函数和先前计算的文件中行数的总和(l)。我在范围计算中减去1,意图一旦line1被文件中的倒数第二行填充,就会停止循环。但同样,索引错误正在停止70行以外的文件结束,所以我不明白为什么它超出了范围。

for i in range(l-1):
    line1 = trackdata.readline()
    line2 = trackdata.readline()

    file_no1 = line1.split()[0]
    time1 = line1.split()[1]
    x1 = line1.split()[2]
    y1 = line1.split()[3]
    length1 = line1.split()[4]
    flow_dir1 = float(line1.split()[5])
    flow_mag1 = line1.split()[6]

    file_no2 = line2.split()[0]
    time2 = line2.split()[1]
    x2 = line2.split()[2]
    y2 = line2.split()[3]
    length2 = line2.split()[4]
    flow_dir2 = float(line2.split()[5])
    flow_mag2 = line2.split()[6]

    if file_no1 == file_no2:
        if abs(flow_dir2 - flow_dir1) > 90.0:
            print x1, y1
            #print >> coordinates2, x2, y2

以下是结果示例:

  

185313.5426 112700.3316

     

1091 153.4636750 184498.3329 112815.9754 100.0000000 344.7592449 0.6516200005

     

184500.6344 112716.0019

     

1091 649.7940156 184461.4951 113012.3586 300.0000000 353.5487391 0.3463617710

     

1091 1599.736768 184398.7140 113126.0630 440.6196278 341.8759486 0.1121731124

     

1091 1734.946452 184382.9241 113119.2729 457.9156941 349.0664262 0.1303822198

     

...

     

1123 0.0000000000 184110.8309 113518.9487 0.0000000000 271.3035311 0.1646996924

错误信息:

  

追踪(最近一次通话):    文件“O:\ ArcGIS \ courseypond \ particletrack \ check_trackangle_5yr”,第28行,>      file_no2 = line2.split()[0]   IndexError:列表索引超出范围

从包含14910行的以空格分隔的文本文件中读取输入数据。每行数据的格式如上面的示例结果:文件编号,时间,x坐标,y坐标,长度,流向,流量大小。目标是在具有相同文件编号标识符的两条线显示流向变化大于90度时识别并存储坐标点。

1 个答案:

答案 0 :(得分:0)

感谢您的建议。似乎我设法通过在循环外部重新定位初始line1和line2分配并在循环结束时将line1重新分配给相等的line2来解决问题。没有更多'列表索引超出范围错误',文件中的每一行数据似乎都配对进行比较。更新后的代码如下:

line1 = trackdata.readline()
line2 = trackdata.readline()

for i in range(l-1):

    file_no1 = line1.split()[0]
    time1 = line1.split()[1]
    x1 = line1.split()[2]
    y1 = line1.split()[3]
    length1 = line1.split()[4]
    flow_dir1 = float(line1.split()[5])
    flow_mag1 = line1.split()[6]

    file_no2 = line2.split()[0]
    time2 = line2.split()[1]
    x2 = line2.split()[2]
    y2 = line2.split()[3]
    length2 = line2.split()[4]
    flow_dir2 = float(line2.split()[5])
    flow_mag2 = line2.split()[6]

    if file_no1 == file_no2:
        if abs(flow_dir2 - flow_dir1) > 90.0:
            print x1, y1
            #print >> coordinates2, x2, y2

    line1 = line2
    line2 = trackdata.readline()