f = open(conf, 'w')
f.writelines(lines)
f.close()
Is it as safe to use the following ....
open(conf, 'w').writelines(lines)
ie no close() to flush the data, but also not assigned an object name
so am I right in thinking that as the object is 'reclaimed' close() is
automatically called ?
True. And not, imho, "bad programming"
I have to disagree. The effect of the above line is sensitive to the
behavior of the underlying implmentation. As Kent mentioned, CPython says
that it'll call close() immediately when the count of the last reference
to the file object goes to zero. But Jython and IronPython on the other
hand make no such guarantees.
This is one of those places where the behavior of the above code is,
unfortunately, undefined in the language specification. We have to dig
ourselves out of such swamps: we should avoid getting into trouble by
explicit close() of the resource.
Python 2.5's 'with' form addresses this problem. The documentation on
file.close() has an example:
http://www.python.org/doc/lib/bltin-file-objects.html#l2h-297
So the code above could become:
##############################################
with open(conf, 'w') as f: f.writelines(lines)
##############################################
You'll need to add the 'from __future__ import with_statement' at the top,
since this is a Python 2.5 specific feature. The code is almost as short
as the previous and it guarantees that f will be flushed and closed after
the statement's done.
_______________________________________________
Tutor maillist - Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor