title: Weird set() error. local variable 'set' referenced before assignment
body: <p>I'm trying to use <code>set()</code>:</p>
  
  <pre><code>adjacent = filter(lambda p: p[0] in xp and p[1] in yp, p_data)
  adjacent = set(adjacent)
  </code></pre>
  
  <p>However, I get this error:</p>
  
  <pre><code>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
  &lt;Greenlet at 0x15879b0: &lt;bound method rawImage.findViewPorts of &lt;BrochureSpaces.imageProcessing.rawImage instance at 0x7f7177356830&gt;&gt;(image_file='image_t.png')&gt; failed with UnboundLocalError
  </code></pre>
  
  <p><strong>Code:</strong></p>
  
  <pre><code>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
  </code></pre>