2010-03-17 67 views
9
coinCount = [2 for i in range(4)] 
total = sum(coinCount) 

這給了我'廉政' 對象不是可調用

TypeError: 'int' object is not callable 

我不明白爲什麼,因爲

print type(coinCount) 

給我

type <'list'> 

回答

41

您確定使用此標識符sum以前在你的代碼中是一個局部變量名,你綁定的最後一個值是int。因此,在該代碼片段中,您試圖調用intprint sum就在您嘗試調用它之前,您會看到,但代碼檢查可能會更快地顯示它。

這種問題是爲什麼專家Pythonistas反覆告訴新手「不要爲自己的變量使用內建名稱!」即使它顯然不是傷害特定的代碼片段:這是一個可怕的習慣,錯誤只是等待發生,如果你使用的標識符,如sumfilelist等,作爲自己的變量或函數 - )

+1

經常推薦的替代方法是在標識符上加下劃線後綴,否則這些標識符會與保留字和內置標識符相沖突;即'type_'或'sum_'或'from_'(如果你使用介詞作爲標識符)。 – cdleary 2010-03-17 07:21:17

1

我想補充一下Alex Martelli所說的不要使用sum作爲變量名稱,但如果你的程序已經太長了,或者你正在閒置,並且你不想重頭開始可以做

sum2 = sum 
del sum 

到總和的價值轉移到SUM2(如有必要),並刪除該變量總和(允許你繼續與求和函數工作)