On Wed, Feb 29, 2012 at 5:02 PM, Craig Yoshioka <craigyk@me.com> wrote:It was the overhead of doing exception handling around the __enter__
> PEP377 suggested some mechanics that seemed a bit complicated for getting the desired effect, but I think, and correct me if I'm wrong, that the same effect could be achieved by having the __enter__ function raise a StopIteration that would be caught by the context and skip directly to the __exit__ function.
call that got PEP 377 rejected.
One way to handle this case is to use a separate if statement to make
the flow control clear.
with cm() as run_body:
if run_body:
# Do stuff
Depending on the use case, the return value from __enter__ may be a
simple flag as shown, or it may be a more complex object.
Alternatively, you may want to investigate contextlib2, which aims to
provide improved support for conditional cleanup in with statements.
(in the current version, this is provided by contextlib2.ContextStack,
but the next version will offer an improved API as
contextlib2.CallbackStack. No current ETA on the next update though)
Cheers,
Nick.
--
Nick Coghlan | ncoghlan@gmail.com | Brisbane, Australia
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
http://mail.python.org/mailman/listinfo/python-ideas
http://www.voidspace.org.uk/
May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.
-- the sqlite blessing http://www.sqlite.org/different.html