[IPython-dev] Chasing my tail with the "with" statement
Darren Dale
dsdale24 at gmail.com
Fri Sep 11 20:03:29 EDT 2009
On Fri, Sep 11, 2009 at 7:36 PM, Brian Granger <ellisonbg.net at gmail.com> wrote:
> Hi,
>
> I am converting some of the traps in IPython to use the with statement. The
> idea is that
> things like sys.excepthook, sys.displayhook, etc. are not always set by
> IPython,
> but only when user code is actually being run. But, I am running into a
> problem
> with sys.displayhook with the results of a magic function.
>
> The prefilter machinery converts:
>
> %alias -> get_ipython().magic("alias")
>
> The end of the get_ipython().magic function looks like this:
>
> with nested(self.builtin_trap, self.display_trap):
> result = fn(magic_args)
> return result
>
> This idea is that we use "with" to enable the display_trap, call the
> magic and then return the result. The builtin_trap works fine, but
> the display_trap doesn't work. The problem is that sys.displaytrap
> is only called when something is returned. But by then ("return result")
> the "with" block has ended and the display_trap is deactivated.
>
> There are other places that I can enable the display_trap, but we
> loose the nice feature of only having the trap set when it is needed.
>
> Any ideas of how we can get around having to leave display_trap set
> all the time?
Can you do:
with nested(self.builtin_trap, self.display_trap):
return fn(magic_args)
?
More information about the IPython-dev
mailing list