File not closed on exception

Grant Edwards invalid at invalid.invalid
Mon Oct 19 10:14:45 EDT 2009


On 2009-10-19, arve.knudsen at gmail.com <arve.knudsen at gmail.com> wrote:

> I thought that file objects were supposed to be
> garbage-collected and automatically closed once they go out of
> scope,

At some point after they go out of scope, they will be.
Eventually.  Exactly when is an implementation detail.

> at least that's what I've been told by more merited Python
> programmers. I'm also quite sure that this is quite a common
> assumption in various programs,

If your program relies on the assumption that some particular
object will be garbage-collected between points A and B, then
that's a bug in your program.  If you depend on the fact that
some object has been delted, then "del" it.  If you depend on
the fact that a file is closed, then close it.

> at least given what opensource code I've seen in my time.
> However, the following script doesn't work on Windows, since
> the file is still open when I try to remove it:
>
> import os.path
>
> def create():
>     f = file("tmp", "w")
>     raise Exception
>
> try: create()
> finally:
>     os.remove("tmp")
>
> So, what's the deal exactly, is the file supposed to be garbage-
> collected (and closed) at the end of create?

Nothing is "supposed" to be garbage-collected.  An object _may_
be garbage collected after some point.

-- 
Grant




More information about the Python-list mailing list