簡體   English   中英

無法解決“列表索引超出范圍”錯誤

[英]Having trouble resolving a 'list index out of range' error

我無法解決“列表索引超出范圍”錯誤。 代碼似乎運行正常,直到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度的流向變化時識別並存儲坐標點。

感謝您的建議。 似乎我設法通過在循環外部重新定位初始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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM