Python无法访问列表中的第二个元素IndexError:list index超出范围

时间:2015-04-12 19:50:39

标签: python

我有一个格式如下的文本文件:

Jeff:2
Bob:7
Adam:4

我已经从文本文件中读取数据并为每一行创建了一个列表。所以当我运行程序时它看起来像这样。

['']
['Jeff', '2']
['Bob', '7']
['Adam', '4']

但是我想为列表中的第一个和第二个元素分配一个变量,这样我就可以从最高到最低对整数进行排序,但它仍然会出现错误,这是我无法解决的。

这是我的代码:

if choice == 1:
    f = open("group1.txt", 'r')
    for line in f:
        line = line.strip("\n").lstrip().rstrip().split(":")
        print(line)
        name = line[0]
        scores = int(line[1])

        print(scores)

它给出错误

scores = line[1]
IndexError: list index out of range

我不确定为什么它不起作用数字是列表“line”中的第二个元素

我该如何解决这个问题?感谢您提前提供任何帮助

3 个答案:

答案 0 :(得分:2)

看起来文件中有一个空行。实际上你已经指出输出包含:

['']

这是一个包含 1 元素的列表,因此line[1] ges超出范围。

只需更改代码即可忽略空行或空行:

for line in f:
    line = line.strip()
    if ':' not in line:
        # can't be splitted in two using : as separator
        continue
    name, scores = line.split(':')

答案 1 :(得分:2)

查看您生成的列表输出:

['']
['Jeff', '2']
['Bob', '7']
['Adam', '4']

看到第一个有什么特别之处?那个是由空行生成的;没有:字符可以拆分,所以只留下一个元素;没有空格只剩下空字符串。

处理该异常:

line = line.strip().split(":")
print(line)
try:
    name = line[0]
    scores = int(line[1])
except IndexError:
    # not enough elements in the line
    continue

print(scores)

try..except捕获当元素不足时抛出的异常,然后continue跳到下一行。

也没有必要单独剥离换行符,然后只是左侧,然后只是右侧;一个str.strip()电话会一步完成所有三项工作。

答案 2 :(得分:0)

文件中的第一行是空行,所以:

line = ''
line = line.strip("\n").lstrip().rstrip().split(":") # still ''
# note that this is just line.strip().split(":")
print(line)
# prints an empty string
name = line[0] # name is an empty string
scores = int(line[1])
# there is no second index in an empty string.

解决这个问题的常用方法是:

for line in f:
    if not line:
        # edge case of an empty line
        continue
    # rest of your code