Is a with on open always necessary?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Fri Jan 20 19:48:08 EST 2012


On Fri, 20 Jan 2012 15:44:17 +0000, Andrea Crotti wrote:

> I normally didn't bother too much when reading from files, and for
> example I always did a
> 
> content = open(filename).readlines()
> 
> But now I have the doubt that it's not a good idea, does the file
> handler stays open until the interpreter quits?

The file will stay open until:

1) you explicitly close it;
2) the reference to the open file goes out of scope and is garbage 
collected; or
3) the Python environment shuts down

whichever happens first.

In the case of #2, the timing is a matter of implementation detail. 
CPython and PyPy currently close the file immediately the last reference 
to it goes out of scope (but that's not a promise of the language, so it 
could change in the future); Jython and IronPython will eventually close 
the file, but it may take a long time.

Except for the quickest and dirtiest scripts, I recommend always using 
either the "with file as" idiom, or explicitly closing the file.


-- 
Steven



More information about the Python-list mailing list