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__
函数的值,因此您必须:
- 创建class时调用
getImage()
方法
- 为 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())
我有以下情况:
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__
函数的值,因此您必须:
- 创建class时调用
getImage()
方法 - 为 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())