不超出范围时列出索引超出范围错误

时间:2016-08-21 20:40:29

标签: python list indexing

我有一个只包含以下行的数据文件:

"testA" "testB":1:"testC":2

现在当我分割这一行并打印结果列表(w)时,我得到以下内容:

['"testA"', '"testB":1:"testC":2']

[]

现在,当我想访问w[0]时,它会返回"testA"就好了,但是当我打印w[1]时,它会崩溃并给出列表索引超出范围错误,但仍然将其打印出来 "testB":1:"testC":2

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

您的代码不会在w[1]行的"testA" "testB":1:"testC":2上崩溃,否则不会打印"testB":1:"testC":2。请注意输出中的其他[]?您的文件包含一些空行,这些行被拆分为[],然后即使在w[0]上也会产生该错误。

要解决此问题,您应检查line和/或从该行创建的列表是否为非空。 (在测试行时,请确保删除任何空格,例如尾随的换行符。)您的代码应该看起来像这样:

with open("test.txt") as f:
    for line in f:
        if line.strip():  # strip the `\n` before checking whether line is empty
            w = line.split()
            print(w[0], w[1])

答案 1 :(得分:0)

为我工作没有任何错误:

>>> a = '"testA" "testB":1:"testC":2'
>>> b = a.split(' ')
>>> b
['"testA"', '"testB":1:"testC":2']
>>> b[0]
'"testA"'
>>> b[1]
'"testB":1:"testC":2'
你做了什么不同的事情吗?

答案 2 :(得分:0)

我也无法重现您的错误,但想要分享我在从文件中读取并在分隔符上拆分的情况下使用的提示。

cleaned_list = [ a.strip() for a in input_line.split(' ') if a ] 

简单并且很好地清理拆分列表。

答案 3 :(得分:0)

答案是该程序在分割的第一行之后读取下一行,该行为空。因此,一旦它试图索引该内容(空行),它就会崩溃。这就是为什么DID打印第一行然后崩溃的原因。非常感谢你的帮助!