Skip to main content
 首页 » 编程设计

python之奇怪的 set() 错误。赋值前引用的局部变量 'set'

2025年05月04日17jackei

我正在尝试使用 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 

请您参考如下方法:

不要使用内置函数作为变量名,这会导致错误:

for set in self.view_ports: 
        for x, y in set: 

文档:Why am I getting an UnboundLocalError when the variable has a value?