Python抛出索引器:列表索引超出范围,带有CSV
我在Python程序中尝试读取CSV文件时出错。最令人费解的是,错误最初并不存在,而且曾经“来过又去过”,但现在又回来了。程序很简单,源CSV文件在任何时候都没有被更改。以下是相关的片段Python抛出索引器:列表索引超出范围,带有CSV,python,csv,indexing,crash,range,Python,Csv,Indexing,Crash,Range,我在Python程序中尝试读取CSV文件时出错。最令人费解的是,错误最初并不存在,而且曾经“来过又去过”,但现在又回来了。程序很简单,源CSV文件在任何时候都没有被更改。以下是相关的片段 with open('/home/rob/Applications/Ambient/timings.csv', 'rt') as csvfile: fr = csv.reader(csvfile, delimiter=',', quotechar='|') for row in fr: pr
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行,在
毫秒=整数(第[1]行)
索引器:列表索引超出范围
正如您所见,在设置对CSV的访问之后,行[1]的访问在程序的早期发生,并且最初没有导致错误。后来出现错误时,我肯定没有修改Python代码的这一部分或CSV文件。为了打发时间,我开始进一步编写一些代码,突然程序又开始运行了。现在它又停止了,并且返回了相同的索引错误。如果我在millis=int(第[1]行)之后添加打印行,程序运行
我需要一个明确的答案,因为我不能继续摆弄后续的代码,并希望以某种方式修复代码,我不知道它为什么崩溃
有什么想法吗
Rob错误的意思是,在随后的一行~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
替换为该逻辑来定义在这种情况下需要执行的操作。这意味着在随后的~88k行中没有逗号和逗号后面的第二个数据。我已检查了文件,但没有出现这种情况。错误发生在CSV文件的第一行,如上所示。“打印行”使其运行正常?问题出在Hanks Shaktiman中,您已经提供了帮助。我检查了CSV文件三倍,问题出现在最后一行。我有一个“空行”在那里,所以一个好的CSV文件没有在最后一行。很难在视觉上看到。干杯,谢谢。@user278480:为了防止空行(任何地方),只需在fr:块中的行中做一个行:继续的第一行。