Python - TypeError: '...' 类型的对象没有 len()

Posted

技术标签:

【中文标题】Python - TypeError: \'...\' 类型的对象没有 len()【英文标题】:Python - TypeError: object of type '...' has no len()Python - TypeError: '...' 类型的对象没有 len() 【发布时间】:2015-01-21 06:29:46 【问题描述】:

这是一个类:

class CoordinateRow(object):

def __init__(self):
    self.coordinate_row = []

def add(self, input):  
    self.coordinate_row.append(input)

def weave(self, other):
    result = CoordinateRow()
    length = len(self.coordinate_row)
    for i in range(min(length, len(other))):
        result.add(self.coordinate_row[i])
        result.add(other.coordinate_row[i])
    return result

这是我的程序的一部分:

def verwerk_regel(regel):
cr = CoordinateRow()
coordinaten = regel.split()
for coordinaat in coordinaten:
    verwerkt_coordinaat = verwerk_coordinaat(coordinaat)
    cr.add(verwerkt_coordinaat)
cr2 = CoordinateRow()
cr12 = cr.weave(cr2)
print cr12

def verwerk_coordinaat(coordinaat):
coordinaat = coordinaat.split(",")
x = coordinaat[0]
y = coordinaat[1]
nieuw_coordinaat = Coordinate(x)
adjusted_x = nieuw_coordinaat.pas_x_aan()
return str(adjusted_x) + ',' + str(y)

但我在“cr12 = cr.weave(cr2)”处遇到错误:

for i in range(min(length, len(other))):

TypeError: 'CoordinateRow' 类型的对象没有 len()

【问题讨论】:

不确定您的问题是什么。您在 CoordinateRow 的实例上调用 len,但该类没有定义 __len__ 函数。 【参考方案1】:

你需要添加一个__len__方法,然后你可以使用len(self)len(other)

class CoordinateRow(object):
    def __init__(self):
        self.coordinate_row = []

    def add(self, input):
        self.coordinate_row.append(input)

    def __len__(self):
        return len(self.coordinate_row)

    def weave(self, other):
        result = CoordinateRow()
        for i in range(min(len(self), len(other))):
            result.add(self.coordinate_row[i])
            result.add(other.coordinate_row[i])
        return result
In [10]: c = CoordinateRow()    
In [11]: c.coordinate_row += [1,2,3,4,5]    
In [12]: otherc = CoordinateRow()    
In [13]: otherc.coordinate_row += [4,5,6,7]    
In [14]:c.weave(otherc).coordinate_row
[1, 4, 2, 5, 3, 6, 4, 7]

【讨论】:

我试过你的方法,但它给出的错误如下:TypeError: 'NoneType' object is not iterable【参考方案2】:

迭代一系列 len(something) 在 Python 中是一种非常反模式。您应该迭代容器本身的内容。

在您的情况下,您可以将列表压缩在一起并对其进行迭代:

def weave(self, other):
    result = CoordinateRow()
    for a, b in zip(self.coordinate_row, other.coordinate_row):
        result.add(a)
        result.add(b)
    return result

【讨论】:

【参考方案3】:

other 是 CoordinateRow 类型,它没有长度。请改用len(other.coordinate_row)。这是具有长度属性的列表。

【讨论】:

以上是关于Python - TypeError: '...' 类型的对象没有 len()的主要内容,如果未能解决你的问题,请参考以下文章

Python - TypeError:需要可迭代参数

TypeError:实例Python之间不支持'<'

python fbprophet错误,TypeError:'module'对象不可调用

TypeError:“NoneType”对象在 Python 中不可迭代

“TypeError:'WebElement'对象不可迭代”错误代码python爬取

TypeError:'int'对象不可迭代,使用 Python 3 [关闭]