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