[IPython-dev] [patch] IPython.set_trace() implemented

Ondrej Certik ondrej@certik...
Mon Jun 29 21:41:13 CDT 2009


On Mon, Jun 22, 2009 at 10:21 PM, Ondrej Certik<ondrej@certik.cz> wrote:
> Hi,
>
> with the attached patch you can now do:
>
> ----
> a = {3: 4}
>
> def something():
>    b = 45
>    import IPython
>    IPython.set_trace()
>
> something()
> ----
>
> and after you run it:
>
> -----------
> Python 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)
> Type "copyright", "credits" or "license" for more information.
>
> IPython 0.10.bzr.r1163 -- An enhanced Interactive Python.
> ?         -> Introduction and overview of IPython's features.
> %quickref -> Quick reference.
> help      -> Python's own help system.
> object?   -> Details about 'object'. ?object also works, ?? prints more.
>
> In [1]: a
> Out[1]: {3: 4}
>
> In [2]: b
> Out[2]: 45
> -------
>
>
> e.g. you can access locals() and globals() immediately. I use this
> very often lately, as it is very handy to debug some broken place in
> the code. Another usage is that I need to implement some difficult
> operation with numpy arrays, dicts, etc. usually some oneliner, but I
> am not sure about the API, so I just call IPython.set_trace(), play
> with the things to get what I want, then just copy & paste the
> oneliner to the code.
>
> More info in the docstring:
>
> In [2]: IPython.set_trace?
> Type:           function
> Base Class:     <type 'function'>
> String Form:    <function set_trace at 0x7f31ca8b3140>
> Namespace:      Interactive
> File:           /home/ondrej/usr/lib/python/IPython/__init__.py
> Definition:     IPython.set_trace()
> Docstring:
>    Starts the IPython shell inplace.
>
>    Example:
>
>    >> import IPython
>    >> IPython.set_trace()
>
>    The user namespace is set to the union of globals() and locals(), e.g.
>    calling set_trace() is exactly equivalent to:
>
>        import IPython
>        IPython.Shell.IPShell(user_ns=dict(globals(), **locals())).mainloop()
>
>    but the actual implementation of set_trace() needs to use the inspect
>    module, because it needs to access the parents frame.
>
>
>
> Let me know if the implementation is ok, or if some more work is needed.


Any comments to that from ipython developers?

Ondrej


More information about the IPython-dev mailing list