On 12/11/2011 12:07 AM, Julian Berman wrote:
Twice recently I've found myself wanting to write the following code:
def fn(a_file=None): responsible_for_closing = False if a_file is None: a_file = open(a_default_location) responsible_for_closing = True do_stuff(a_file) if responsible_for_closing: a_file.close()
which can be written slightly shorter I know, but it's still a tiny bit messy and repetitive. What I'd prefer to write is something more like:
def fn(a_file=None): with contextlib.maybe(a_file, open, default) as a_file: do_stuff(a_file)
Expecting contextlib to have such a specialized context manager that does exactly what you want is perhaps too much. However, you should be able to write a class yourself that keeps the flag and does the conditional opening and closing in the __enter__ and __exit__ methods.