Python &引用;列表索引超出范围“;尽管有正确的行号

Python &引用;列表索引超出范围“;尽管有正确的行号,python,Python,我想尽量避免在这里张贴愚蠢的问题,但我不太确定如何自己解决这个问题。我试图读取文件中的特定行(行号根本没有改变),但我得到了错误。我可以通过迭代来打印文件中的每一行,但是读取我需要的特定行(或除第0行以外的任何行)会抛出错误,尽管它在以前的版本中工作(最近的更改只是将我需要的行向下移动了1,我根据需要调整了行号) 错误发生在函数的此区域: with open("wallet.txt","r") as file: rawcurrency = file.readlines()[0]

我想尽量避免在这里张贴愚蠢的问题,但我不太确定如何自己解决这个问题。我试图读取文件中的特定行(行号根本没有改变),但我得到了错误。我可以通过迭代来打印文件中的每一行,但是读取我需要的特定行(或除第0行以外的任何行)会抛出错误,尽管它在以前的版本中工作(最近的更改只是将我需要的行向下移动了1,我根据需要调整了行号)

错误发生在函数的此区域:

with open("wallet.txt","r") as file:
    rawcurrency = file.readlines()[0]
    linesplit = rawcurrency.split(": ")
    currency = linesplit[1]
    rawbalance = file.readlines()[3]
    linesplit = rawbalance.split(": ")
    global balance
    balance = linesplit[1]
此行抛出错误:

rawbalance=file.readlines()[3]

以下是我正在读取的文件的外观:

Currency used: £
Creation Date: 20/05/2020 19:28:31
Starting Wallet Amount = 500.0
Balance: 500.0

如果解决方案很简单,我很抱歉。

问题是函数
readlines()
读取整个文件并返回文件中的行列表。 你第一次打电话给它

file.readlines()[0]

对您有效,因为它读取整个文件,您可以访问列表的第一个索引,顺便说一句,这是您实际需要的行。 你给它打的第二个电话

file.readlines()[3]


引发异常,因为它从上次调用中到达的位置读取整个文件,该位置是文件的结尾,这意味着它返回一个空列表,因为没有更多的行可读取。然后尝试访问列表中不存在的第三个索引,因此出现异常。

正如DYZ所指出的,您读取了两行。无论如何,这是一个更简单、更直接的解决方案:

导入行缓存
...
原始货币=linecache.getline(“wallet.txt”,1)#获取第1行
原始余额=linecache.getline(“wallet.txt”,4)#获取第4行
...

请添加完整的错误消息。它会准确地告诉您(和我们)错误的位置。在抛出错误的行之前添加行
文件。seek(0)
。顺便说一句,您使用
file.readlines()
读取了两次文件,但没有重新打开它。第二次尝试读取时,您已经在文件末尾。file.seek(0)执行了该操作。谢谢你,jfaccioni!我从来不知道那句台词。