Python抛出索引器:列表索引超出范围,带有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

我在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行,在 毫秒=整数(第[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:块中的
行中做一个
行:继续
的第一行。