pythonic way to free resources
Chirayu
thephoenix235 at gmx.net
Sat Aug 17 00:25:28 EDT 2002
this one is nice (by Bengt Richter). but we usually want to handle just one
or two exception types and let the others pass. might the following work?
class Finalizer:
def finalize(self):
for f in self.__dict__.values():
f.close()
def __del__ (self): self.finalize()
fin = Finalizer()
try:
fin.f1 = f1 = file(...)
# do stuff with f1
fin.f2 = f2 = file(...)
# do stuff with f2
except IOError, e:
print "An IO Error prevented success: %s." % e
if we_need_to_return_here:
del f
return
except Exception, e:
del f
raise
# release all resources successfully allocated and logged
del f
i guess this sprinkles the code with "del f" (or "f.finalize()") but it
still looks a lot better than not using a Finalizer class.
or perhaps, with nested try blocks.
fin = Finalizer()
try:
try:
fin.f1 = f1 = file(...)
# do stuff with f1
fin.f2 = f2 = file(...)
# do stuff with f2
except IOError, e:
print "An IO Error prevented success: %s." % e
if we_need_to_return_here:
return
except Exception, e:
raise
finally:
# release all resources successfully allocated and logged
del f
ps: would the "del f" would have the possibly minor advantage of
decrementing the ref counts (or deleting) of all the objects it holds?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20020817/a3d76d67/attachment.html>
More information about the Python-list
mailing list