def _setitem(self, cpv, values): s = cpv.rfind("/") fp = os.path.join(self.location,cpv[:s],".update.%i.%s" % (os.getpid(), cpv[s+1:])) try: myf=open(fp, "w") except IOError, ie: if ie.errno == 2: try: self._ensure_dirs(cpv) myf=open(fp,"w") except (OSError, IOError),e: raise cache_errors.CacheCorruption(cpv, e) except OSError, e: raise cache_errors.CacheCorruption(cpv, e) for k, v in values.items(): if k != "_mtime_": myf.writelines("%s=%s\n" % (k, v)) myf.close() self._ensure_access(fp, mtime=values["_mtime_"]) #update written. now we move it. new_fp = os.path.join(self.location,cpv) try: os.rename(fp, new_fp) except (OSError, IOError), e: os.remove(fp) raise cache_errors.CacheCorruption(cpv, e) Is there a scoping error because myf is assigned in a try -> except block? see below. TB: phases failed Traceback (most recent call last): File "./State.py", line 18, in ? print pkg.data.get("RDEPEND","") File "/home/skyfw/code/svn/savior/portage/ebuild/ebuild_src.py", line 91, in __getattr__ return super(package, self).__getattr__(key) File "/home/skyfw/code/svn/savior/portage/package/metadata.py", line 53, in __getattr__ data = self._fetch_metadata() File "/home/skyfw/code/svn/savior/portage/ebuild/ebuild_src.py", line 111, in _fetch_metadata data = self._parent._update_metadata(self) File "/home/skyfw/code/svn/savior/portage/ebuild/ebuild_src.py", line 147, in _update_metadata self._cache[pkg.cpvstr] = mydata File "/home/skyfw/code/svn/savior/portage/cache/template.py", line 62, in __setitem__ self._setitem(cpv, d) File "/home/skyfw/code/svn/savior/portage/cache/metadata.py", line 86, in _setitem flat_hash.database._setitem(self, cpv, values) File "/home/skyfw/code/svn/savior/portage/cache/flat_hash.py", line 66, in _setitem myf.writelines("%s=%s\n" % (k, v)) UnboundLocalError: local variable 'myf' referenced before assignment