pythonic way to free resources
Chirayu
thephoenix235 at gmx.net
Tue Aug 20 01:10:21 EDT 2002
Someone had already suggested a similar approach. However, for a case like
class NoFile:
def close (self): pass
f = g = h = NoFile ()
try:
# stuff that opens f, g
# some other processing which may raise an error
# stuff that opens h
except:
# set some flags maybe
raise # let the exception pass
f.close()
g.close()
h.close()
finally:
f.close()
g.close()
h.close()
you end up repeating the f.close() and g.close()
Someone here suggested the Finalizer class approach avoids this with
minimum typing.
class Finalizer:
def close(self):
for i in self.__dict__: i.close ()
fin = Finalizer ()
try:
# f = fin.f = open(....)
# g = fin.g = open(....)
# some other processing which may raise an error
# h = fin.h = open(....)
except:
# set some flags maybe
raise # let the exception pass
fin.close ()
finally:
fin.close()
Other approaches I tried involve more typing every time i add another
resource to the list. (I did try assigning bound methods (f.close, g.close
and h.close in this case) instead of the objects themselves but have'nt
found much need for the additional flexibility.
At 01:17 PM 8/20/02 +1200, Greg Ewing wrote:
>Another possibility:
>
> class NoFile:
> def close(self):
> pass
>
> f = NoFile()
> g = NoFile()
> h = NoFile()
> try:
> # stuff that opens f, g and/or h
> finally:
> f.close()
> g.close()
> h.close()
More information about the Python-list
mailing list