如何避免列表索引超出范围

时间:2012-05-17 02:11:54

标签: python

def most_popular_guests(file_in):
    f=file(file_in,'r')
    listoflines=f.readlines()
    D={}
    dict={}
    title=''

    for lines in listoflines:
        if (lines.isupper()):
            title=lines
        else: 
            lines=lines.split(":")
            names=(lines[1]).split(",")
        for name in names:
            if D.has_key(name):
                D[name].append(Show_Appearance(title,lines[0]))
            else:
                D[name]=[Show_Appearance(title,lines[0])]
                break

    dict=longest(D)


def longest(D):    
    max=0
    d={}
    for name in D.keys():
        value = D[name]
        if max<len(value):
            max=len(value)

    for keys in D.keys:
        value=D[keys]
        if len(value)==max:
            d[key]=value

    return d

我试图找到一个字典,其中最常出现的人是关键,并且该人的节目列表为值。保持此列表索引超出范围错误。

1 个答案:

答案 0 :(得分:3)

脚本的一般问题是它做出了错误的假设,并且在假设结果不正确时不准备处理这种情况:)

更具体地说,lines.split(":")不能保证返回至少2个元素长的列表,而其余代码只是盲目地假设访问行[0]和行[1]是安全的。

如何处理这个问题取决于你的目标 - 你可能想忽略这样的输入,停止脚本或者记录警告。像这样的东西会跳过格式错误的行:

        lines=lines.split(":")
        if len(lines) < 2:
            print "Woops, bad line: %s" % lines
            continue