[Tutor] Closing file objects when object is garbage collected?
Michael Langford
mlangford.cs03 at gtalumni.org
Tue Feb 12 17:19:04 CET 2008
> How do I ensure that when an object is deleted by the garbage
> collector that the file objects contained within the object are
> closed, or collected by the garbage collector?
__del__ is called after the reference count gets to zero for an
object. You can explicitly call close on the file there if you're
worried you have a dangling reference to the file somewhere. I'd use
the class below first to help.
If you'd like to see when if your files are being closed, a class such
as this may help your debugging. Use it in the place of your file or
open call in the class that is at issue:
class LoudFile(file):
"""Shows when a file is closed"""
def close(self):
file.close(self)
if self.closed:
print "%s is now closed" % self.name
def __del__(self):
"""shows when a file is garbage collected"""
print "%s fileobject is being deleted" % self.name
> I'm having issues when I test my software on XP, but not Linux. When I
> run the progam it fails after running for a while but not at exactly
> the same point each time. It fails in one of two ways, the user
> interface either completely disappears, or gives a OS error message
> unhanded exception error.
Run the program from the pdb debugger (it comes installed with
python). Here is an excellent introduction to it:
http://www.onlamp.com/pub/a/python/2005/09/01/debugger.html
It will allow you to poke around at the innards of your program right
as it dies.
--Michael
--
Michael Langford
Phone: 404-386-0495
Consulting: http://www.RowdyLabs.com
More information about the Tutor
mailing list