<div dir="ltr">On Sun, Nov 4, 2012 at 5:41 PM, Nick Coghlan <span dir="ltr"><<a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">Yep. You can also do some pretty interesting things with ExitStack<br></div></div>

because of the pop_all() operation (which moves all of the registered<br>
operations to a *new* ExitStack instance).<br>
<br>
I wrote up a few of the motivating use cases as examples and recipes<br>
in the 3.3 docs:<br>
<a href="http://docs.python.org/3/library/contextlib#examples-and-recipes" target="_blank">http://docs.python.org/3/library/contextlib#examples-and-recipes</a><br>
<br>
I hope to see more interesting uses over time as more people explore<br>
the possibilities of a dynamic tool for composing context managers<br>
without needing to worry about the messy details of unwinding them<br>
correctly (ExitStack.__exit__ is by far the most complicated aspect of<br>
the implementation).<br>
<div class="HOEnZb"><div class="h5"><br>
Cheers,<br>
Nick.<br>
<br></div></div></blockquote><div><br></div><div>Pretty interesting things indeed. It does look like the concept is very powerful. If I were to design a language I might have just given every function an optional ExitStack. I.e. an explicit, dynamic, introspectable version of defer.</div>

</div></div></div>