2013-07-31 27 views
0

我已經閱讀了很多奇怪的語法錯誤問題,並且還沒有看到它,但我真的很茫然。我做了一些功課,其截止日期已經越來越近而這個錯誤我無法擺脫的:奇怪的SyntaxError:在定義語句返回後無效的語法

def create_voting_dict(): 
    strlist = [voting_data[i].split() for i in range(len(voting_data))] 
    return voting_dict = {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist[h]))] for h in range(len(strlist))} 

它得到我的錯誤:

return voting_dict = {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist[h]))] for h in range(len(strlist))} 
                         ^  
SyntaxError: invalid syntax 

當我定義voting_dict沒有出現此錯誤在程序中,但我需要全局定義它,所以我把它放在返回後,然後我得到了錯誤。一直計算括號,但似乎沒有問題。

我相信,當我看到問題時,它很容易,但我只是看不到它。謝謝你的幫助。

*投票數據是字符串列表,和我做了分割字符串,並創建一個字典

+1

爲什麼通過使用所有這些'range(len(...))'調用來使事情變得複雜?爲什麼不只是在外部strlist中使用'{outer [0]:[int(inner)for outer in outer [3:]]}'? – abarnert

+1

另外,一般情況下,如果在包含大量parens,括號和大括號的121行字符上出現語法錯誤,則調試的第一步應該是將其分解成更小的部分並找出哪個部分有錯誤。事實上,即使您在這裏沒有錯誤,您是否可以真正理解該行現在寫入的內容? (當然,你不能在一個80列的窗口中,像一個SO問題或一個典型的終端......但是即使忽略它,這也很難理解。) – abarnert

+0

我花了一些時間閱讀,但實際上你的第一個評論中的表述會使其更簡單。至於你的第二個評論,我會把它放在心裏,爲我的下一個錯誤:)謝謝。我的編程經驗是有限的。 – Leo

回答

6

你不能在return定義過程。 (因爲任務不返回值)只是做

return {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist[h]))] for h in range(len(strlist))} 

或定義一個新的語句voting_dict然後return voting_dict

見的例子 -

>>> def test(): 
     return num = 2 
SyntaxError: invalid syntax 
>>> def test(): 
     return 2 
+0

謝謝,這是我的錯誤。 – Leo

+0

我可以並將在10分鐘內完成:)後續程序使用由此過程創建的voting_dict,但是當我運行它們時,我得到的錯誤全局voting_dict未定義。任何想法是如何造成的?這就是我試圖把這個定義放在return語句中的原因。 – Leo

+1

如果您的'voting_dict'是一個全局變量,您需要在函數中使用'global voting_dict'語句。 –

1

及其與您return語句的問題,您可以在不進行分配。只要做到這一步之前。

1

如果你想創建/填充一個全局變量voting_dict,然後執行:

def create_voting_dict(): 
    strlist= [voting_data[i].split() for i in range(len(voting_data))] 
    global voting_dict 
    voting_dict= {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist))} 

create_voting_dict() 

def create_voting_dict(): 
    strlist= [voting_data[i].split() for i in range(len(voting_data))] 
    return {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist))} 

voting_dict= create_voting_dict() 

甚至

def create_voting_dict(vd): 
    strlist= [vd[i].split() for i in range(len(vd))] 
    return {strlist[h][0]:[int(strlist[h][g]) for g in range(3, len(strlist))} 

voting_dict= create_voting_dict(voting_data) 

後來的優點是,它更一般,因此可以用於其他情況。