[Python-ideas] unpacking context managers in WITH statement
Mathias Panzenböck
grosser.meister.morti at gmx.net
Fri Feb 3 17:30:12 CET 2012
Of course there is something to replace nested:
>>> with open("egg.txt","w") as egg, open("spam.txt","w") as spam:
>>> egg.write("egg")
>>> spam.write("spam")
The nested function was removed because it is broken. E.g. take this:
>>> with nested(open("egg.txt","w"), open("spam.txt","w")) as egg, spam:
>>> egg.write("egg")
>>> barspamwrite("spam")
What if opening of spam.txt produces an exception? Then egg.txt will never be closed! The new with
syntax takes care of this. It basically rewrites it as:
>>> with open("egg.txt","w") as egg:
>>> with open("spam.txt","w") as spam:
>>> egg.write("egg")
>>> spam.write("spam")
On 02/03/2012 04:09 PM, Yury Selivanov wrote:
> Hello,
>
> With the removal of "contextlib.nested" in python 3.2 nothing was introduced to replace it. However, I found it pretty useful, despite the fact that it had its own quirks. These quirks can (at least partially) be addressed by allowing unpacking syntax in the context manager.
>
> Consider the following snipped of code:
>
> ctxs = ()
> if args.profile:
> ctxs += (ApplicationProfilerContext(),)
> if args.logging:
> ctxs += (ApplicationLoggingContext(),)
> with *ctxs:
> Application.run()
>
> As of now, without "nested" we have either option of reimplementing it, or to write lots of ugly code with nested 'try..except's. So the feature was taken out, but nothing replaced it.
>
> What do you think guys?
>
> Thanks,
> Yury
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> http://mail.python.org/mailman/listinfo/python-ideas
>
More information about the Python-ideas
mailing list