2013-04-07 50 views
1

這裏是代碼,它應該從文件中讀取,然後產生一個字典...類型錯誤:遍歷所有非序列...在python

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 
+2

請出示完整的錯誤消息。 – BrenBarn 2013-04-07 00:14:42

+0

你應該至少重寫你的程序,以避免多次執行相同的事情,即:'next_line.split(「 - 」)'可以完成一次並分配給變量 – soulcheck 2013-04-07 00:31:04

+1

這段代碼充滿了東西,看起來不對,你應該使用'open()'不是'file()',並且在文件中使用'for'循環而不是'file.readline()'和'with'。 – 2013-04-07 00:43:16

回答

0

目前尚不清楚錯誤所在。一件事我可以在代碼中注意的是,在for i in ...代碼之後,d [..]它可以是一個單一的值或數組:

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

我會避免把這樣的表達式內聯,並且如果做一個/否則,如:

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 +陣列將是海峽恕我直言(?)?

一點題外話,而不是所有的帶/修剪你可能要使用正規...