Python's "only one way to do it" philosophy isn't good?
doug at alum.mit.edu
Thu Jul 5 23:12:22 CEST 2007
"Chris Mellon" <arkanes at gmail.com> writes:
>> Some people here have been arguing that all code should use "with" to
>> ensure that the files are closed. But this still wouldn't solve the
>> problem of the large data structures being left around for an
>> arbitrary amount of time.
> I don't think anyone has suggested that. Let me be clear about *my*
> position: When you need to ensure that a file has been closed by a
> certain time, you need to be explicit about it. When you don't care,
> just that it will be closed "soonish" then relying on normal object
> lifetime calls is sufficient. This is true regardless of whether
> object lifetimes are handled via refcount or via "true" garbage
But it's *not* true at all when relying only on a "true GC"! Your
program could easily run out of file descriptors if you only have a
real garbage collector and code this way (and are opening lots of
files). This is why destructors are useless in Java -- you can't rely
on them *ever* being called. In Python, however, destructors are
quite useful due to the refcounter.
> Relying on the specific semantics of refcounting to give
> certain lifetimes is a logic error.
> For example:
> f = some_file() #maybe it's the file store for a database implementation
> f.write('a bunch of stuff')
> del f
> #insert code that assumes f is closed.
That's not a logic error if you are coding in CPython, though I agree
that in this particular case the explicit use of "with" would be
preferable due to its clarity.
More information about the Python-list