因此,我正在运行一个Python脚本,在其中调用Python的调试器PDB,通过编写:

import ipdb; ipdb.set_trace()

(iPython版本的PDB,尽管我不认为这有什么不同;我只对彩色输出使用它)。

现在,当我进入调试器时,我想要执行一个多行语句,如if子句或for循环,但只要我输入

if condition:

然后点击返回键,我得到错误消息*** SyntaxError: invalid syntax (<stdin>, line 1)

如何在PDB中执行多行语句?如果不可能,有一种方法,这仍然执行一个If子句或循环?


我不知道你是否能做到这一点,尽管这对ipdb来说是一个很好的特性。当然,你可以使用列表推导式,并执行简单的多行表达式,例如:

if y == 3: print y; print y; print y;

你也可以事先写一些函数来做任何你需要做的事情,这通常需要多行。


在Python(2.7.1)解释器或调试器(import pdb)中,可以使用以下语法执行多行语句。

for i in range(5): print("Hello"); print("World"); print(i)

注意:当我在解释器内时,我必须在代码执行之前按return两次。但是,在调试器内部,我只需要按return一次。


如果您希望在到达断点时执行几个命令,则有一种特殊情况。然后是调试器命令。它允许您输入多行命令,然后用end关键字结束整个序列。更多与(pdb)帮助命令。


你可以在pdb中启动一个临时的交互式Python会话,其中所有的局部变量都是可用的:

(pdb) !import code; code.interact(local=vars())
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

完成后,使用Ctrl-D返回常规pdb提示符。

不要按Ctrl-C,那会终止整个pdb会话。


在python3中,ipdb(和pdb)有一个名为interact的命令。它可用于:

启动一个交互式解释器(使用code模块),其全局名称空间包含当前作用域中找到的所有(全局和局部)名称。

要使用它,只需在pdb提示符下输入交互。除此之外,它对于应用跨多行代码非常有用,还可以避免意外触发其他pdb命令。


我的建议是使用IPython嵌入。

ipdb> from IPython import embed; embed()