【问题标题】:IndexError messages with python lists and split带有 python 列表和拆分的 IndexError 消息
【发布时间】:2012-05-20 15:10:18
【问题描述】:

我正在尝试学习 python 并深入研究字符串函数。作为一个简单的例子,我写了这个

# example line
# username:*:231:-2:gecos field:/home/dir:/usr/bin/false

FILENAME = "/etc/passwd"

filehandle = open(FILENAME, 'r')

lines = filehandle.readlines()

for line in lines:
        line = line.rstrip()
        fields = line.split(':')
        print fields[0]

这个例子每次都有效,并给了我一个用户名。列表中的第一个字段。

这也适用于 [0:6] 并打印所有字段。 [:1] 也打印用户名。 [-1] 也打印最后一个字段。

问题是[1]、[-2]、[2]等导致这个错误

文件“splits.py”,第 16 行,在 打印字段[-2] IndexError:列表索引超出范围

我在这里做错了吗?我确定这很愚蠢,但我正在查看的示例说我可以做 [1]、[2] 等等。

我不认为我的输入有问题,因为它是 /etc/passwd 并且 [0] 和 [-1] 有效。

非常感谢。

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    听起来你的文件中有一些空行,可能在最后。

    例子:

    >>>line = ''
    >>>fields = line.split(":")
    >>>print fields[0]
    ''
    >>>print fields[-1]
    ''
    >>>print fields[0:6]
    ''
    >>>print fields[1]
    IndexError: list index out of range
    

    你可以这样修复它:

    for line in lines:        
        line = line.rstrip()
        fields = line.split(':')
        if len(fields) == 1:
            continue
        print fields[0]
    

    【讨论】:

    • 或者类似if len(fields) != 6: continue,如果你知道一行应该总是有6个元素。 continue 跳到 for 循环的下一次迭代。
    • 你是对的。我想知道这是不是最后一行。谢谢。显然我错过了这一点。谢谢!
    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多