尝试读取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 程序运行???
我需要一个明确的答案,因为我不能继续摆弄后续代码,并希望我能修复代码,我不知道它为什么会崩溃???
有什么想法吗?
罗布
答案 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
替换为该逻辑来定义在这种情况下需要完成的操作。