我为什么会在这个程序中遇到索引错误?
我正在尝试写一段代码,目的是把第一行的数字减去第二行的数字。每次运行这个程序时,我都会遇到一个错误,提示是IndexError: list index out of range
。我在文本文件中调用了第0行和第1行的数据,但它就是不进行计算。
test = open("test.txt", "r")
num1 = int(test.readlines()[0])
num2 = int(test.readlines()[1])
print(num1 - num2)
这是测试文件中的数值。我本来希望它能输出250。
500
250
我希望这段代码能进行计算,输出计算的结果。
2 个回答
1
调用 readlines
一次会把文件里的所有行都放到一个列表里返回。再调用一次就会返回一个空列表,因为第一次调用的时候已经把所有行都读完了。下面的代码片段会让这个更清楚:
test = open("data.txt", "r")
print(test.readlines())
print(test.readlines())
输出:
['500\n', '250\n']
[]
在你的脚本中,第3行调用 readlines
时返回的是 []
。这个空列表在索引1的位置没有任何东西,所以就出现了索引错误。
你可以这样重写代码,让它正常工作:
test = open("data.txt", "r")
lines = test.readlines()
num1 = int(lines[0])
num2 = int(lines[1])
print(num1 - num2)
如果你使用 with
来处理文件,这样在完成后会自动关闭文件,效果会更好。
with open("data.txt", "r") as test:
lines = test.readlines()
num1 = int(lines[0])
num2 = int(lines[1])
print(num1 - num2)
3
第一次调用 readlines
方法时,会把文件里的所有行都读出来,并把文件指针放在文件的最后面。这样第二次调用的时候,就没有内容可以读取了,所以返回的是一个空列表。
你可以选择一次性读取整个文件,然后用这个列表来定义 num1
和 num2
:
with open("test.txt") as f:
lines = f.readlines()
num1 = int(lines[0])
num2 = int(lines[1])
或者你也可以选择每次读取一行,使用 readline
(没有"s")这个方法。
with open("test.txt") as f:
num1 = int(f.readline())
num2 = int(f.readline())