TypeError: cannot unpack non-iterable GetColorImage object

TypeError: cannot unpack non-iterable GetColorImage object

我有以下情况:

cratecolor.py:(代码被剥离到最低限度...)

import ... ...


class GetColorImage:  
    def __init__(self, ia=None):
        self.path = None
        self.img = None
        self.img0 = None
        self.s = None
        self.basetime = 0
        self.count = 0
        self.stride = 32
        self.ia = ia
        self.img_size = 640
        self.auto = True
        self.getImage()

    def getImage(self):
        self.ia.remote_device.node_map.ExposureTime.value = 350
        self.ia.remote_device.node_map.Gain.value = 150
    
        ...
        ...

        print(color, l)        # prints: 1 59.64829339143065

        return color, l

main.py:(代码被剥离到最低限度)

...
...

 # code exectued on a qthread:

 def getcolor(self, idin):
    color, lightness = cratecolor.GetColorImage(ia=self.ia) #******
    print(color, lightness)

在标有 ***** 的行中,我收到了错误消息 color, lightness = cratecolor.GetColorImage(ia=self.ia) TypeError: cannot unpack non-iterable GetColorImage object,但我不明白为什么。 任何帮助表示赞赏。

您正在 return 获取 GetColorImage 对象,而不是您实际查找的两个值。 getImage() 中的 return 语句只是 return 将值传递给您的构造函数,对它们不做任何处理。构造函数完成,整个 GetColorImage 对象被 returned。如果您尝试 return 来自构造函数的其他内容,您将收到错误消息。

您可以只创建对象然后调用 getImage():

colorObj = cratecolor.GetColorImage(ia=self.ia)
color, lightness = colorObj.getImage()

正如下面所指出的,如果您不需要该对象,您可以将它们链接起来:

color, lightness = cratecolor.GetColorImage(ia=self.ia).getImage()

您不能 return 来自 __init__ 函数的值,因此您必须:

  1. 创建class时调用getImage()方法
  2. 为 class 定义一个 __iter__ 方法,以自动允许您将其分配给多个变量。

第二个可能是更好的解决方案。这是您要添加到 class 以使其起作用的方法:

def __iter__(self):
    return iter(self.getImage())

要解包对象,必须确保它是可迭代的:

>>> class Foo:
...     def __iter__(self): return iter(range(2))
... 
>>> a, b = Foo()
>>> a
0
>>> b
1

因此,您应该使 class 可迭代:

class GetColorImage:
    ...
    def __iter__(self):
        return iter(self.getImage())