Allowing ref counting to close file items bad style?

sjdevnull at yahoo.com sjdevnull at yahoo.com
Wed Aug 30 00:00:32 EDT 2006


Paul Rubin wrote:
> Dan <bounces at foo.org> writes:
> > Is this discouraged?:
> >
> >      for line in open(filename):
> >          <do something with line>
>
> Yes.
>
> > Can I count on the ref count going to zero to close the file?
>
> You really shouldn't.  It's a CPython artifact.

I disagree, somewhat.  No, you shouldn't count on the "ref count" per
se going to 0.  And you shouldn't count on the file object being GC'd
_immediately_ after the last reference is destroyed. You should be able
to rely on it being GC'd at some point in the not-horribly-distant
future, though.

Doing an explicit .close() is not normally useful and muddies the code
(and introduces more lines for potential bugs to infest).

And yes, I know that the language spec technically allows for no GC at
all--it's a QOI issue, not a spec issue, but any implementation that
didn't GC would be useless as a general Python platform (perhaps useful
for specific embedded uses, but programming for such an environment
would be different from programming for rational python platforms in
bigger ways than this).

(And personally I think the benefits to programmers of guaranteeing
ref-counting semantics would outweigh the additional headaches for
Jython and other alternative implementations).




More information about the Python-list mailing list