IndexError: List index out of range - Python CSV
IndexError: List index out of range - Python CSV
我正在使用 tweepy 从 Twitter 中提取 10 条推文并将其存储在 CSV 中,以便稍后在前端网页上显示。我的代码每 60 分钟刷新一次,有时我会收到“IndexError”。
准确错误如下:
return ks[5]
IndexError: List index out of range
以下是从 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 条推文写入其中。
此外,如果我再次 运行 代码,错误消失并且网页加载时推文没有任何问题,令人惊讶!
我错过了什么?
任何帮助深表感谢!谢谢!
正如 Ken White 在上面的评论中指出的那样。该错误是由于您试图访问列表边界之外的索引引起的。
正在发生的事情是,您的 CSV 文件中有一个空行 python 无法处理,因为您正在调用 index 0
,即使它不存在,因此 python 抛出一个例外。
为了修复此错误,您需要做的是检查列表中是否有足够的元素来 运行 您的代码。通过使用
if(len(row) < 1):
continue
另一个可能导致问题的地方是您将列表 d
放入另一个列表 ks
中。然后你尝试 return 新列表中的第 5 个对象。但是,没有对象,因为您现在有一个如下所示的列表
ks={{tweet,tweetyouwant,tweet},{list,two,if,present}}
当您期望列表看起来像这样时
ks={tweet,tweetyouwant,tweet}
为了解决这个问题,只需删除 ks=list(d)
并在您要调用 ks
的任何地方调用 d
你的整个片段应该是这样的。
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
我正在使用 tweepy 从 Twitter 中提取 10 条推文并将其存储在 CSV 中,以便稍后在前端网页上显示。我的代码每 60 分钟刷新一次,有时我会收到“IndexError”。
准确错误如下:
return ks[5]
IndexError: List index out of range
以下是从 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 条推文写入其中。 此外,如果我再次 运行 代码,错误消失并且网页加载时推文没有任何问题,令人惊讶!
我错过了什么? 任何帮助深表感谢!谢谢!
正如 Ken White 在上面的评论中指出的那样。该错误是由于您试图访问列表边界之外的索引引起的。
正在发生的事情是,您的 CSV 文件中有一个空行 python 无法处理,因为您正在调用 index 0
,即使它不存在,因此 python 抛出一个例外。
为了修复此错误,您需要做的是检查列表中是否有足够的元素来 运行 您的代码。通过使用
if(len(row) < 1):
continue
另一个可能导致问题的地方是您将列表 d
放入另一个列表 ks
中。然后你尝试 return 新列表中的第 5 个对象。但是,没有对象,因为您现在有一个如下所示的列表
ks={{tweet,tweetyouwant,tweet},{list,two,if,present}}
当您期望列表看起来像这样时
ks={tweet,tweetyouwant,tweet}
为了解决这个问题,只需删除 ks=list(d)
并在您要调用 ks
d
你的整个片段应该是这样的。
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