1

ここにコードがあります。ファイルから読み取り、辞書を生成することになっています...

def get_songs(setlists):
    f = file(setlists)
    d = {}
    next_line = f.readline()
    while (next_line != ""):
        if next_line[0].isdigit():
            concert1 = concert(int(next_line.split("-")[0]) , int(next_line.split("-")[1]) , \
                                       int(next_line.split("-")[2]) , next_line.split("-")[3].strip("\n"))
            for i in f.readline().split('/'):
                d[i.strip(" ").strip("\n").split("(")[0]] = (concert1 if not d.has_key(i.strip(" ").strip("\n").split("(")[0])
                                                            else ([d[i.strip(" ").strip("\n").split("(")[0]] , concert1] if
                                                                  isinstance(d[i.strip(" ").strip("\n").split("(")[0]] , concert)
                                                                  else d[i.strip(" ").strip("\n").split("(")[0]] + [concert1]))
        next_line = f.readline()      
    return d
4

1 に答える 1

0

エラーがどこにあるかは明らかではありません。コードで気付くことの 1 つは、コードの後でfor i in ...d[..] が単一の値または配列のいずれかを取ることです。

d[..] = (concert1 
    if cond1 else 
    ([d[..], concert1] if cond2
        else d[..]+concert1)

そのような式をインラインに配置することは避け、if/else を次のように実行します。

tmp = None
if cond1:
  tmp = concert1
elif cond2:
  tmp = [d[d[i.strip(" ").strip("\n").split("(")[0]] , concert1]
else:
  tmp = d[i.strip(" ").strip("\n").split("(")[0]] + [concert1]


d[i.strip(" ").strip("\n").split("(")[0]] = tmp

最後elseがやや間違っていることがわかります(?) str + array は str imho になりますか?

補足として、これらすべてのストリップ/トリムの代わりに、正規表現を使用することをお勧めします...

于 2013-04-14T09:00:01.467 に答える