2013-03-28 46 views
1

我的程序調用len(list),我的len定義如下。雙鏈表的長度實現,python

def __len__(self): 
    if not self.head: 
     return '[]' 
    else: 
     return self.size 

這是錯誤我得到

assert len(testList) == 0, "List should be empty, but length is %r" % len(testList) 
TypeError: __len__() should return an int 

所以基本上我得回到「[]」當列表爲空,否則我需要恢復其長度。我將如何去做這件事。

+0

對於空列表的長度返回'「[]」'看起來像你讀錯了要求。爲什麼它不會返回0? –

回答

4

返回值__len__必須爲int。所以當列表爲空時返回0。


docs

object.__len__(self) 

調用來實現內置函數len()。 應該返回對象的長度,一個大於0的整數。另外,一個對象不是 定義了一個__nonzero__()方法,其__len__()方法返回零 在布爾上下文中被認爲是錯誤的。

+1

爲了一致性,當'not self.head'並且在__len__中返回'self.size'時,我會讓代碼具有'self.size = 0'。 – khachik

1

__len__應返回int> = 0參見docs
這是錯誤的話。

您正在返回一個字符串('[]'),它不是int,因此會引發此錯誤。
返回0會更合適。