【问题标题】:IndexError: List index out of range - Python CSVIndexError:列表索引超出范围 - Python CSV
【发布时间】:2018-05-15 02:30:17
【问题描述】:

我正在使用 tweepy 从 Twitter 中提取 10 条推文,并将其存储在 CSV 中,以便稍后在前端网页上显示。我的代码每 60 分钟刷新一次,在某些时候我会收到“IndexError”。

以下是确切的错误:

返回 ks[5]

IndexError: 列表索引超出范围

以下是从 CSV 检索特定推文的功能:

def tweet6(self):
    with codecs.open('HELLOTWITTER.csv', 'r', encoding='utf-8', errors='ignore') as f:
        reader = csv.reader(f)
        d = {}
        for i, row in enumerate(reader):
            d[row[0]]=row[1:]
            if (i>=10):
                break    
    ks=list(d)
    return (ks[5])

此错误仅偶尔发生,但我无法弄清楚为什么会发生这种情况,尽管每次刷新整个代码时 CSV 都会写入所有 10 条推文。 另外,如果我再次运行代码,错误就会消失,并且网页加载时推文没有任何问题,令人惊讶!

我错过了什么? 任何帮助深表感谢!谢谢!

【问题讨论】:

  • 请正确格式化代码。
  • 放置几个prints 来检查变量是否包含预期的结果(或使用调试器代替)通常很有帮助
  • 很明显,在某些时候您对CVS 每次都将所有 10 条推文写入其中有误。否则,您会期望我们相信 Python 是在撒谎,只是在假装。 list index out of range 表示列表索引超出范围,出现该错误的唯一原因是列表索引超出范围。
  • @KenWhite :我知道这是空白行或数据不足的问题。但是有什么办法可以处理这个错误吗?
  • 我认为您接受的答案与此有关,不是吗?

标签: python csv index-error


【解决方案1】:

正如Ken White 在上面的 cmets 中指出的那样。该错误是由于您尝试访问列表边界之外的索引而引起的。

发生的情况是,您的 CSV 文件中有一个空白行,python 无法处理,因为您正在调用 index 0,即使它不存在,因此 python 会引发异常。

为了修复此错误,您需要检查列表中是否有足够的元素来运行您的代码。通过使用

if(len(row) < 1):
   continue

另一个可能导致问题的地方是您将列表d 放入另一个列表ks 中。然后您尝试返回新列表中的第 5 个对象。但是,没有对象,因为您现在有一个看起来像这样的列表

ks={{tweet,tweetyouwant,tweet},{list,two,if,present}}

当您期望列表看起来像这样时

ks={tweet,tweetyouwant,tweet}

为了解决这个问题,只需摆脱 ks=list(d) 并调用 d 即可调用 ks


你的整个 sn-p 应该是这样的。

def tweet6(self):
    with codecs.open('HELLOTWITTER.csv', 'r', encoding='utf-8', errors='ignore') as f:
        reader = csv.reader(f)
        d = {}
        for i, row in enumerate(reader):

            #Verify row is within range
            if(len(row) < 1):
                continue

            #Get the rows values
            d[row[0]]=row[1:]

            #If past row 10 then break
            if (i>=10):
                break  

    #ks=list(d) #Not needed D is already a list
    return (d[5]) #return the row of the 6th tweet

【讨论】:

  • 这个问题也可能是由ks[5] 引起的,但我认为这不像row 没有足够的数据那样可能
  • 嘿,我仍然继续收到 IndexError。还有什么我可以做的吗? ://
  • 你检查了 ks[5] 吗?这似乎是我能想到的唯一会导致问题的其他地方。我的下一个技巧是在每一行之间添加打印语句,以查看它在哪里中断。这样就更容易知道错误在哪里
  • 查看您的 OP 肯定是 ks5 返回错误。尝试只返回 D。您已经有一个列表 D,然后您将使用 ks=list(d) 放入第二个列表中,抱歉我在移动设备上缺少格式
猜你喜欢
  • 1970-01-01
  • 2016-08-25
  • 2017-04-05
  • 2012-07-15
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多