0
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

最多登場人物をキー、その人物の番組一覧を値とした辞書を探しています。このリスト インデックスを範囲外に保持するエラー。

4

1 に答える 1

3

スクリプトの一般的な問題は、スクリプトが間違った仮定を作成し、仮定が正しくないことが判明した場合の状況に対処する準備ができていないことです:)

より具体的にlines.split(":")は、少なくとも 2 要素の長さのリストを返すことが保証されていませんが、コードの残りの部分は、lines[0] と lines[1] にアクセスしても安全であると盲目的に想定しています。

これを正確に処理する方法は、目標によって異なります。そのような入力を無視したり、スクリプトを停止したり、警告をログに記録したりすることができます。このようなものは、間違った形式の行をスキップします:

        lines=lines.split(":")
        if len(lines) < 2:
            print "Woops, bad line: %s" % lines
            continue
于 2012-05-17T03:51:51.653 に答える