【问题标题】:Python throwing IndexError: list index out of range, with CSVPython throwing IndexError: list index out of range, with CSV
【发布时间】:2014-10-20 10:17:21
【问题描述】:

我在尝试读取 CSV 文件时遇到了 Python 程序错误。最令人困惑的是错误最初并不存在,并且以前“来来去去”一次,但现在又回来了。该程序很简单,源 CSV 文件在任何时候都没有被更改过。这里是相关的sn-p...

  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

这是抛出的错误:

Traceback(最近一次调用最后一次): 文件“/home/rob/Applications/Ambient/AmbientDecode_02.py”,第 82 行,在 毫= int(行[1]) IndexError: 列表索引超出范围

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

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

有什么想法吗?

罗伯

【问题讨论】:

  • 这意味着在随后的 ~88k 行之一中,逗号后面没有逗号和第二个数据。
  • 我检查了文件,但没有发生。如上所示,该错误发生在 CSV 文件的第一行。 “打印行”让它运行正常?

标签: python csv indexing crash range


【解决方案1】:

错误的意思是,在随后的 ~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 替换为该逻辑。

【讨论】:

  • 问题出在
  • 感谢 shaktimaan,您提供了帮助。我检查了 CSV 文件三倍,问题出在最后一行。我在那里有一个“空行”,所以一个好的 CSV 文件在最后一行没有 。肉眼很难发现。干杯,谢谢。
  • @user278480:为了防止出现空行(任何地方),只需在for row in fr: 块的第一行添加一个if not row: continue
猜你喜欢
  • 1970-01-01
  • 2018-02-08
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
相关资源
最近更新 更多