带有python列表和拆分的IndexError消息

时间:2012-05-20 15:10:19

标签: python python-2.7

我正在尝试学习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]都有效。

非常感谢。

1 个答案:

答案 0 :(得分: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]