TypeError:“Item”类型的参数不可迭代

时间:2015-09-05 08:21:50

标签: python

所以我创建了一个对象'Item',其中包含列表中的列表

        for item in stock_list:
            item_list = item.split(",")
            self.__items += [Item(item_list[0], item_list[1], float(item_list[2]), int(item_list[3]))]

当试图找到与代码匹配的项目(索引0)时,我正在尝试创建一个新函数来返回此项目

def find_item(self, code):
    for item in self.__items:
        if code in item:
            print(item)

当我运行它时,它会给我TypeError: argument of type 'Item' is not iterable错误,我无法弄清楚为什么? 我应该创建一个返回私有自我.__代码的getCode()函数吗?或者那会不会有所作为?

1 个答案:

答案 0 :(得分:0)

我猜这个问题出现在行 -

if code in item:

对于自定义类,您不能这样做 - x in C - 其中C是自定义类的对象(实例),除非自定义类具有__contains__()方法。示例 -

>>> class CC:
...     pass
...
>>> class CB:
...     def __contains__(self, item):
...             if item == 1:
...                     return True
...             else:
...                     return False
...
>>> cco = CC()
>>> cbo = CB()
>>> 1 in cco
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument of type 'CC' is not iterable
>>> 1 in cbo
True
>>> 2 in cbo
False

但鉴于此,__contains__()基本上用于成员资格测试,其中一个对象可以包含多个元素(以list / dict为例),

如果您尝试比较代码等于某些其他变量,例如self.__code。然后你需要提供一些返回__code的方法(或属性),如果__code再次是某种类型的列表,那么你试图检查是否itemself.__code中,您可以覆盖__contains__(),如上所示。