我正在尝试使用set()
:
adjacent = filter(lambda p: p[0] in xp and p[1] in yp, p_data)
adjacent = set(adjacent)
然而,我收到此错误:
Traceback (most recent call last):
File "/home/anarchist/Desktop/python27/lib/python2.7/site-packages/gevent/greenlet.py", line 327, in run
result = self._run(*self.args, **self.kwargs)
File "/home/anarchist/Desktop/BSpaces/BrochureSpaces/imageProcessing/__init__.py", line 60, in findViewPorts
adjacent = set(adjacent)
UnboundLocalError: local variable 'set' referenced before assignment
<Greenlet at 0x15879b0: <bound method rawImage.findViewPorts of <BrochureSpaces.imageProcessing.rawImage instance at 0x7f7177356830>>(image_file='image_t.png')> failed with UnboundLocalError
代码:
class rawImage:
def __init__(self, **kwargs):
logging.root.setLevel(logging.DEBUG)
self.p_data = [] # Positions of all non opaque pixels
gevent.spawn(self.findTransparent, **kwargs).join()
gevent.spawn(self.findViewPorts, **kwargs).join()
def findTransparent(self, **kwargs):...
def findViewPorts(self, **kwargs):
# Takes data and divides it into chunks that are continuous
self.view_ports = [] # Each entry is list of (x, y)
# Take first pixel, find all adjacent, transfer and delete
p_data = self.p_data
while p_data:
xp = range(p_data[0][0] - 1, p_data[0][0] + 2) # + 2 because of the quirks of range
yp = range(p_data[0][1] - 1, p_data[0][1] + 2) # Possible x, y ranges of adjacent pixels
_temp = []
_temp.append((p_data[0][0], p_data[0][1]))
del p_data[0]
print xp, yp
adjacent = filter(lambda p: p[0] in xp and p[1] in yp, p_data)
adjacent = set(adjacent)
print adjacent, len(p_data)
while adjacent:
pixel = adjacent[0]
print pixel, '-'
xp = range(pixel[0] - 1, pixel[0] + 2)
yp = range(pixel[1] - 1, pixel[1] + 2) # Possible x, y ranges of adjacent pixels
_temp.append((pixel[0], pixel[1]))
try:
print adjacent[0]
p_data.remove(adjacent[0])
print p_data
del adjacent[0]
except BaseException as e:
logging.warning('findViewPorts %s', e)
return
adjacent.add(set(filter(lambda p: p[0] in xp and p[1] in yp, p_data)))
logging.debug('findViewPorts ' + str(_temp))
self.view_ports.append(_temp)
break
for set in self.view_ports:
for x, y in set:
print x, y
答案 0 :(得分:6)
不要使用内置函数作为变量名,这会导致错误:
for set in self.view_ports:
for x, y in set:
文档:Why am I getting an UnboundLocalError when the variable has a value?