为什么我的列表索引超出范围'创建类的实例时出错?

时间:2014-07-10 15:08:36

标签: python list

我有一个文本文件,其中包含几个以标签分隔的关于博客文章的信息列。文件中的每一行代表一篇文章,通过在标签周围分割一行,您可以提取有关该特定文章的ID号,标题,段落和其他内容。

例如:

id   articleID    title    paragraph
1    4    Motorola prototypes from Frog    Some cool looking concepts for phones...

所以,我编写了一段代码,将其转换为一个名为 articlesFileList 的列表,其中每一行都是列表中的一个元素,这与你的工作完全一样。期望的。

file = open("articles.txt", "r", encoding="utf-8")
file.readline() # (Skip first line)
articlesFile = file.read()
articlesFileList = articlesFile.split("\n")

在此之后,我将这些行拆分为各自的列并创建 Article 实例,这些实例具有id,title,paragraph等属性。

for line in articlesFileList: columns = line.split("\t") article = Article(columns[0], columns[2], columns[3]) articleList = [] articleList.append(article)

但是这段代码会抛出这个错误:

 Traceback (most recent call last):
 File "E:\Python\RBTrends\RBTrendsAnalysis.py", line 55, in <module>
 articlesList = createArticles(articlesFileList)
 File "E:\Python\RBTrends\RBTrendsAnalysis.py", line 32, in createArticles
 article = Article(columns[0], columns[2], columns[3])
 IndexError: list index out of range

我的第一个想法是, columns 列表可能没有包含正确的信息,所以我添加了以下代码来检查该列表中的内容:

for i in columns:
    print(i)

......列表看起来绝对完美。每行的每列都正确打印。我甚至试图打印列表中的每个索引,看看是否可以手动访问它们,他们可以。访问列表元素的程序似乎只是在创建类的实例时。

任何帮助/解释都会非常感激,因为这是一个让我困惑一段时间的错误。

1 个答案:

答案 0 :(得分:0)

columns列表中没有足够的项目,并且无法检索不存在的项目。

我可以想象两个原因:

  • 你的文件包含空行,它可以是最后一行后的最后一行&#34; \ n&#34;。
  • 您的行不是由制表符分隔,而是以空格分隔。

为了测试这个,我会在它失败的行之前添加

assert len(columns) >= 4

当您使用索引3时,您需要包含4个项目的列表。如果列表更短,该行将抛出异常。