为什么在创建类的实例时会出现“列表索引超出范围”的错误?

0 投票
1 回答
1174 浏览
提问于 2025-04-18 12:49

我有一个文本文件,里面有几列用制表符分隔的信息,这些信息是关于博客文章的。文件中的每一行代表一篇文章,通过把一行按制表符分开,你可以提取出一个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、标题、段落等属性。

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

这个 columns 列表里没有足够的项目,所以在尝试获取不存在的项目时就出错了。

我能想到两个可能的原因:

  • 你的文件里有空行,可能是最后一行在最后的 "\n" 后面。
  • 你的行之间不是用制表符分隔的,而是用空格。

为了测试这个问题,我建议在出错的那一行之前加上:

assert len(columns) >= 4

因为你使用的是索引 3,所以列表里需要有 4 个项目。如果列表短于这个长度,这一行就会出错。

撰写回答