【问题标题】:Index out of Range when I know that index exists当我知道索引存在时索引超出范围
【发布时间】:2015-08-10 21:08:39
【问题描述】:

试图让自己成为一个解析多行文本文件的脚本。对于我的一生,我无法弄清楚为什么它一直给我IndexOutofRange,但是如果我打印列表的内容,它会正确显示,当我删除或注释掉打印时,或者尝试在之后做任何进一步的处理将项目附加到列表中,我得到同样的错误。

源文本文件有一堆行,每条数据用逗号分隔,如下所示:abc,123456,abcd,efgh 我正在尝试从字符串中删除除编号部分之外的所有内容,然后将该“子字符串”添加到列表中然后将其写入输出文件。我确信我写它的方式可能不是很有效,所以请在你认为合适的时候更正。

import sys

fname = sys.argv[1]
list = []
output = "output.txt"
with open(fname) as f:
    content = f.readlines()
    for line in content:
        line = line.split(',')
        list.append(line[1])

with open(output, w) as w:
    w.write(list)

索引超出范围命中list.append(line[1]) 部分。

【问题讨论】:

  • 我猜,有一行只有一个参数,表示 [1] 超出范围。
  • 你有一个尾随换行符,或者换句话说:一个空的最后一行?
  • 您的代码假定每一行至少有一个逗号。
  • 您的索引超出范围 - Python 不会说谎。在split之后使用length(line)测试元素个数。

标签: python string list indexoutofrangeexception


【解决方案1】:

您的文件很可能在开头或结尾包含一个空行,其中不包含逗号或任何其他类型的文本。

尝试检测空行并跳过它们。

import sys

fname = sys.argv[1]
list = []
output = "output.txt"
with open(fname) as f:
    content = f.readlines()
    for line in content:
        if line:
            line = line.split(',')
            list.append(line[1])

with open(output, w) as w:
    w.write(list)

【讨论】:

    【解决方案2】:

    您可以使用上面的代码找到有问题的行,它会为您打印有问题的行。

    import sys
    
    fname = sys.argv[1]
    list = []
    output = "output.txt"
    with open(fname) as f:
        content = f.readlines()
        for line in content:
            if line:
                line = line.split(',')
                try:
                    list.append(line[1])
                except Exception, ex:
                    print "problem with line", line
    
    with open(output, w) as w:
        w.write(list)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 2021-07-15
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      相关资源
      最近更新 更多