I have classes that can take a file as an argument, for example:
ParserClass(file('/some/file', 'rb'))
If I understand Python correctly, the file will be closed automatically once the object is garbage collected. What I don't understand is exactly when that happens. In a function like:
def parse_stuff(filename):
parser = ParserClasss(file(filename, 'rb'))
return list(parser.info())
Shouldn't that parser
object be GC'd immediately after the function exits, causing the file to be closed? Yet, for some reason, Python appears to have the file open long after the function exits. Or at least it looks that way because Windows won't let me modify the file, claiming Python has it open and forcing me to to close IDLE.
Is there a way to ensure files are closed, short of explicitly asking for it for every file I create? I also want to add that these classes are external, I don't want to dig through them to find out exactly what they with the file.
You can use the with
statement to open the file, which will ensure that the file is closed.
with open('/some/file', 'rb') as f:
parser = ParserClasss(f)
return list(parser.info())
See http://www.python.org/dev/peps/pep-0343/ for more details.
You can use with
to open files. When you use with
, the file will be implicitly closed when the with
block is exited, and it will handle exception states as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With