2010-03-09 128 views
2

我是Python新手。我有一個開頭方法:爲什麼我在Python中找不到`len(list)`?

def foo(self, list): 
    length = len(list) 

我在其他情況下,所謂的len()成功,但在這裏我得到:

TypeError: object of type 'type' has no len() 

如何說服Python的這個對象傳入是一個列表?我錯過了什麼?

+5

我無法重現此錯誤。我不明白爲什麼它不應該工作。當然你的'list'參數會影響'list'類型,但是你仍然可以調用'len'。你可以提供一個最小的列表,將失敗,並出現該錯誤? – 2010-03-09 11:40:15

+0

對不起,沒時間了。我把名字改爲'lst',它起作用。 – 2010-03-09 12:30:23

+1

-1:「對不起,沒有時間」。您無法提供足夠的信息來幫助我們?抱歉,我們不能提供更多幫助,但沒有更多信息,我們只是猜測。 – 2010-03-09 15:25:37

回答

5

因爲list是列表類型的名稱。

使用不同的名稱。

def foo(self, lst): 
    length = len(lst) 

並確保你不叫foo這樣的:

Foo.foo(list) 
+1

這沒有意義,也不會導致問題。一個參數或變量可以有任何名稱,即使是一個影響內建的名稱,它也不會神奇地引用內建而不是實際的值。 – 2010-03-09 12:52:13

+0

也許它在編輯之後變得更有意義,但我認爲KennyTM也在說要確保不要調用通過名爲「list」的方法(除非它也被覆蓋爲意味着別的東西)。 我認爲我們大多數人會同意,當你學習一門語言時,使用相同的名字作爲內建函數是一個萬無一失的方法,可能會遇到問題和困惑。作爲一種最佳實踐,編碼者應該避免這種情況,除非他們真的打算覆蓋/隱藏內建(這很罕見)。 – Matthew 2010-03-09 14:45:17

2

看起來像你打電話type()list這是一種類型本身。不要將名稱list用於列表,因爲它已經是內置類型。使用Lmylist或其他什麼,它應該工作。

5

你遮蔽內置。您傳遞給foo方法的值不是一個列表對象,而是一個list類型,它沒有任何長度。

相關問題