2013-07-07 37 views
1

我在發現此錯誤時試圖做一些代碼。我首先用name a param1param2來定義player類。 當我運行game函數,我嘗試創建一個player 類的實例,我得到了UnboundLocalError錯誤。這裏是我的代碼:UnboundLocalError:分配前引用的局部變量'player'

class player(object): 

    def __init__ (self, name, param1 = None, param2 = None): 

     self.param1 = param1 
     self.param2 = param2 
     self.name = name 

def game(n = int(raw_input('How many players? '))): 

    playerList = [] 

    for x in range(n): 
     playerList.append(player(raw_input('Player %i: ' %(x+1)))) 

    for player in playerList: 
     player.param1 = int(raw_input('%s, how many do you predict? ' %(player.name.upper()))) 

所以基本上,我的問題是Python沒有讓我在函數內部創建一個類的實例。我搜查了很多,但我還沒有找到我正在尋找的東西。 在此先感謝!

+0

默認變量是在解析過程中計算的,因此在函數參數中添加'raw_input'並不是一個好主意,因爲它正在進行即使您不曾運行此功能也會被調用。 –

回答

4

您在for player in playerList中使用變量名稱player,但您的班級也被命名爲player。由於您爲該名稱指定了一個值(在for循環中),因此Python將其視爲本地變量,因此您無法訪問該名稱的全局類。

最好的解決方案是用大寫字母P將類名改爲Player。Python中的約定用於以大寫字母開頭的類。

(前面一行出現錯誤的原因是Python在分析函數時決定哪些變量是本地的,因爲您使用player作爲for循環的目標,所以它被標記爲本地,但在當時首先訪問它,當試圖訪問類時,沒有值分配給該局部變量。)

+0

錯誤在這一行'playerList.append(player(raw_input('Player%i:'%(x + 1))))' –

+1

@SukritKalra局部變量是在解析函數定義時決定的,所以對於'player該函數不會訪問全局範圍,它認爲'player'是一個局部變量。 –

+0

哦,是的。忘了那個。抱歉。 :) –

相關問題