Dan*_*man 109
有一个ipdb项目将iPython嵌入到标准的pdb中,所以你可以这样做:
import ipdb; ipdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
它可以通过常规安装pip install ipdb.
ipdb非常简短,因此您可以ipdb.py在Python路径上的某处创建一个文件,并将以下内容粘贴到文件中,而不是easy_installing :
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)
Run Code Online (Sandbox Code Playgroud)
Ale*_*dio 53
在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
Run Code Online (Sandbox Code Playgroud)
这是当你运行它时会发生的事情(我任意选择在现有的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
Run Code Online (Sandbox Code Playgroud)
小智 12
如果您使用的是更现代版的IPython(> 0.10.2),您可以使用类似的东西
from IPython.core.debugger import Pdb
Pdb().set_trace()
Run Code Online (Sandbox Code Playgroud)
但是使用ipdb可能更好
ars*_*ars 11
相当于
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
与IPython是这样的:
from IPython.ipapi import make_session; make_session()
from IPython.Debugger import Pdb; Pdb().set_trace()
Run Code Online (Sandbox Code Playgroud)
它有点冗长,但很高兴知道你是否安装了ipdb.该make_session呼叫需要一次设置的配色方案等,并set_trace调用可以放在任何地方,你需要打破.
通常,当我使用ipython时,我会在其中使用"pdb"命令打开自动调试.
然后,我在脚本所在的目录中使用"run myscript.py"命令运行我的脚本.
如果我得到异常,ipython会在调试器中停止程序.查看magic ipython命令的帮助命令(%magic)
我想简单地在我想要设置断点的脚本中粘贴这个单线程:
__import__('IPython').Debugger.Pdb(color_scheme='Linux').set_trace()
Run Code Online (Sandbox Code Playgroud)
较新的版本可能会使用:
__import__('IPython').core.debugger.Pdb(color_scheme='Linux').set_trace()
Run Code Online (Sandbox Code Playgroud)
看起来模块最近已被洗牌了一下.在IPython 0.13.1上,以下内容适用于我
from IPython.core.debugger import Tracer; breakpoint = Tracer()
breakpoint() # <= wherever you want to set the breakpoint
Run Code Online (Sandbox Code Playgroud)
虽然唉,它在qtconsole中一点都不值钱.
较新版本的IPython提供了一种简单的机制,可以将IPython会话嵌入和嵌套到任何Python程序中.您可以按照以下方法嵌入IPython会话:
try:
get_ipython
except NameError:
banner=exit_msg=''
else:
banner = '*** Nested interpreter ***'
exit_msg = '*** Back in main IPython ***'
# First import the embed function
from IPython.frontend.terminal.embed import InteractiveShellEmbed
# Now create the IPython shell instance. Put ipshell() anywhere in your code
# where you want it to open.
ipshell = InteractiveShellEmbed(banner1=banner, exit_msg=exit_msg)
Run Code Online (Sandbox Code Playgroud)
然后ipshell()在你想要进入IPython shell时使用.这将允许您在代码中嵌入(甚至嵌套)IPython解释器.