从代码中进入IPython是可能的吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (127)

对于我的调试需求,pdb非常好。如果我能进入ipython就更好了。这可能吗?

提问于
用户回答回答于

有一个ipdb项目将iPython嵌入到标准的pdb中,所以你可以这样做:

import ipdb; ipdb.set_trace()

它可以通过平常安装pip install ipdb

ipdb非常短,所以不要使用easy_installing,还可以ipdb.py在Python路径的某处创建一个文件,并将以下内容粘贴到该文件中:

import sys
from IPython.Debugger import Pdb
from IPython.Shell import IPShell
from IPython import ipapi

shell = IPShell(argv=[''])

def set_trace():
    ip = ipapi.get()
    def_colors = ip.options.colors
    Pdb(def_colors).set_trace(sys._getframe().f_back)
用户回答回答于

在IPython 0.11中,你可以像这样直接在你的代码中嵌入IPython

你的程序可能看起来像这样

In [5]: cat > tmpf.py
a = 1

from IPython import embed
embed() # drop into an IPython session.
        # Any variables you define or modify here
        # will not affect program execution

c = 2

^D

当你运行它时,会发生这种情况(我任意选择在现有的ipython会话中运行它,按照我的经验嵌套ipython会话会导致它崩溃)。

In [6]:

In [6]: run tmpf.py
Python 2.7.2 (default, Aug 25 2011, 00:06:33)
Type "copyright", "credits" or "license" for more information.

IPython 0.11 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: who
a       embed

In [2]: a
Out[2]: 1

In [3]:
Do you really want to exit ([y]/n)? y


In [7]: who
a       c       embed

扫码关注云+社区

领取腾讯云代金券