【问题标题】:"List index out of range" despite having a correct line number尽管行号正确,但“列表索引超出范围”
【发布时间】:2020-05-20 18:42:08
【问题描述】:

我想尽可能避免在这里发布愚蠢的问题,但我不太确定如何自己解决这个问题。我正在尝试读取文件中的特定行(行号根本没有改变)但我得到了错误。我可以通过迭代来打印文件中的每一行,但是单独读取我需要的特定行(或除第 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

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

【问题讨论】:

  • 请添加完整的错误信息。它准确地告诉您(和我们)错误在哪里。
  • 在抛出错误的行之前添加行file.seek(0)Explanation.
  • 顺便说一句,您使用file.readlines() 读取了两次文件而没有重新打开它。第二次尝试读取时,您已经在文件末尾了。
  • file.seek(0) 完成了这项工作。谢谢你jfaccioni!从来不知道那条线。

标签: python


【解决方案1】:

正如 DYZ 指出的那样,您阅读了两次。无论如何,一个更简单,更直接的解决方案:

import linecache
...
raw_currency = linecache.getline("wallet.txt", 1)  # Get line 1
raw_balance =  linecache.getline("wallet.txt", 4)  # Get line 4
...

【讨论】:

    【解决方案2】:

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

    file.readlines()[0]

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

    file.readlines()[3]

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

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 2020-09-28
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多