Python 抛出 IndexError: 列表索引超出范围,使用 CSV
我在一个Python程序中遇到了读取CSV文件的错误。最让人困惑的是,这个错误一开始并不存在,之前也“时有时无”,现在又回来了。这个程序很简单,而源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
这是出现的错误信息:
追踪记录(最近的调用在前): 文件 "/home/rob/Applications/Ambient/AmbientDecode_02.py",第82行,在 millis = int(row[1]) IndexError: 列表索引超出范围
从上面可以看到,程序在设置好访问CSV文件后,就开始访问row[1],一开始并没有出错。但是当错误后来出现时,我肯定没有修改过Python代码的那部分,也没有改动CSV文件。为了打发时间,我开始写后面的代码,突然程序又能运行了。现在又停止了,之前的索引错误又回来了。如果我在millis = int(row[1])后面加上print row,程序就能运行???
我需要一个明确的答案,因为我不能继续在后面的代码上瞎折腾,希望能修复一个我根本不知道为什么崩溃的代码???
有什么想法吗?
Rob
1 个回答
0
这个错误的意思是,在后面的大约88,000行中,有一行缺少逗号和逗号后面的第二个数据。你可以修改程序,让它更好地处理这个错误,方法如下:
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
替换成你想要的逻辑就可以了。