2013-03-28 59 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会更合适。