我正在使用tweepy从Twitter发送10条推文并将其存储在CSV中,以便稍后在前端网页上显示。我的代码每60分钟刷新一次,并且在某些时候我得到“IndexError”。
以下是确切的错误:
返回ks [5]
IndexError:列出索引超出范围
以下是从CSV检索特定推文的功能:
http://
此错误仅在有时发生,但我无法弄清楚为什么会发生这种情况,尽管每次刷新整个代码时CSV都会写入所有10条推文。 此外,如果我再次运行代码,错误消失并且网页加载时没有任何问题,令人惊讶的是!
我错过了什么? 任何帮助深表感谢!谢谢!
答案 0 :(得分:3)
正如Ken White在上面的评论中指出的那样。该错误是由您尝试访问超出列表范围的索引引起的。
正在发生的事情是你的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
您的整个代码段应该是这样的。
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