Python抛出IndexError:列表索引超出范围,使用CSV

时间:2014-08-26 23:42:23

标签: python csv indexing crash range

尝试读取CSV文件时,我在Python程序中出错。最令人困惑的是错误最初并不存在,而且已经过去了#34;曾经,但现在已经回来了。程序很简单,源CSV文件也没有随时更改过。这是相关的片段......

  with open('/home/rob/Applications/Ambient/timings.csv', 'rt') as csvfile:
  fr = csv.reader(csvfile, delimiter=',', quotechar='|')
  for row in fr:
    previous=delay
    delay=0
    millis = int(row[1])

CSV文件具有以下结构:

0,824 
1,496 
0,356 
1,792 
0,388 
0,764 
1,560 
0,1264 
1,724 
0,2820 
1,496 
for ~88k lines

这是引发的错误:

  

追踪(最近一次通话):     File" /home/rob/Applications/Ambient/AmbientDecode_02.py" ;,第82行,在       millis = int(row [1])   IndexError:列表索引超出范围

正如您所看到的那样,在设置对CSV的访问权限之后,在程序的早期就会访问行[1],并且最初它不会导致错误。当错误出现后,我绝对没有改变Python代码的那部分或CSV文件。为了打发时间,我开始进一步研究一些代码,突然程序又开始运行了。现在它再次停止,并返回相同的索引错误。如果我在 millis = int(row [1])之后添加 print row 程序运行???

我需要一个明确的答案,因为我不能继续摆弄后续代码,并希望我能修复代码,我不知道它为什么会崩溃???

有什么想法吗?

罗布

1 个答案:

答案 0 :(得分:0)

错误的含义是,在随后的~88k行之一中,逗号后面没有逗号和第二个数据。您可以修改程序以优雅地处理错误,因此:

with open('/home/rob/Applications/Ambient/timings.csv', 'rt') as csvfile:
    fr = csv.reader(csvfile, delimiter=',', quotechar='|')
        for row in fr:
            previous=delay
            delay=0
            try:
                millis = int(row[1])
            except IndexError:
                pass

上面的代码只会忽略它找不到第二个数据的行(在逗号后面)并继续到下一行。您可以通过将上述代码中的pass替换为该逻辑来定义在这种情况下需要完成的操作。