2015-10-22 26 views
1

我創建了一個函數,它創建一個空列表,並將另一個列表中的值賦給一個變量。然後,代碼應該在每次調用函數時將變量的值附加到列表中。該函數被放置在一個while循環中,所以它應該繼續追加。但是,在添加第一個元素後,我得到一個錯誤,告訴我該字符串對象不可調用。代碼如下。我需要這個模擬考試。任何想法?:爲什麼當將變量追加到列表中時,會得到「'str'對象不可調用」?

def tracker(): 
    global tracker 
    global trackerresult 
    trackerresult = [] 
    tracker = opposite1[decider] 
    trackerresult.append(tracker) 
    print(trackerresult) 

結果:

Traceback (most recent call last): 
    File "C:\Users\Timic\Downloads\Python Opposites Prorgam (1).py", line 47, in <module> 
tracker() 
TypeError: 'str' object is not callable 
+0

請添加一個標籤語言(python,我認爲) – Oriol

回答

2

您具有tracker全局變量和函數tracker之間的名稱衝突。當您運行def tracker(): ...時,它將變量tracker設置爲一個函數對象。當您第一次調用tracker函數時,它將修改全局變量tracker以明確指向opposite1[decider]的結果,該結果是一個字符串。下一次嘗試調用tracker函數失敗,因爲該函數已被字符串覆蓋。

+0

感謝你的這一點,我設法通過更改要跟蹤的函數的名稱來解決該錯誤。但是現在出現了一個新的邏輯錯誤,它不會將變量'tracker'追加到'trackerresult'列表中。它只是取代它。爲什麼? –

+1

@TimicNdoloka我不明白你的問題是什麼,但它與這個全局變量陰影問題無關,應該[單獨提出](http://stackoverflow.com/questions/ask) – ppperry

+0

謝謝你,我發佈了一個新問題。 –

相關問題