Hi,<br><br>I am converting some of the traps in IPython to use the with statement.  The idea is that<br>things like sys.excepthook, sys.displayhook, etc. are not always set by IPython,<br>but only when user code is actually being run.  But, I am running into a problem<br>
with sys.displayhook with the results of a magic function.<br><br>The prefilter machinery converts:<br><br>%alias -&gt; get_ipython().magic(&quot;alias&quot;)<br><br>The end of the get_ipython().magic function looks like this:<br>
<br>            with nested(self.builtin_trap, self.display_trap):<br>                result = fn(magic_args)<br>            return result<br><br>This idea is that we use &quot;with&quot; to enable the display_trap, call the <br>
magic and then return the result.  The builtin_trap works fine, but<br>the display_trap doesn&#39;t work.  The problem is that sys.displaytrap<br>is only called when something is returned.  But by then (&quot;return result&quot;)<br>
the &quot;with&quot; block has ended and the display_trap is deactivated.<br><br>There are other places that I can enable the display_trap, but we<br>loose the nice feature of only having the trap set when it is needed.<br>
<br>Any ideas of how we can get around having to leave display_trap set<br>all the time?<br><br>Cheers,<br><br>Brian<br>