为什么在创建类的实例时会出现“列表索引超出范围”的错误?
我有一个文本文件,里面有几列用制表符分隔的信息,这些信息是关于博客文章的。文件中的每一行代表一篇文章,通过把一行按制表符分开,你可以提取出一个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 个项目。如果列表短于这个长度,这一行就会出错。