Mik*_*ike 135 python debugging multiline pdb
所以我正在运行一个Python脚本,在其中我通过编写调用Python的调试器PDB:
import ipdb; ipdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
(iPython的PDB版本,虽然我认为它不会产生影响;我只将其用于彩色输出).
现在,当我到调试器时,我想执行多行语句,例如if子句或for循环,但是一旦我输入
if condition:
Run Code Online (Sandbox Code Playgroud)
并点击返回键,我收到错误信息 *** SyntaxError: invalid syntax (<stdin>, line 1)
如何在PDB中执行多行语句?如果不可能有一种解决方法仍然执行if子句或for循环?
Mar*_*nas 241
您可以在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)
>>>
Run Code Online (Sandbox Code Playgroud)
完成后,使用Ctrl-D返回常规pdb提示符.
只是不要按Ctrl-C,这将终止整个pdb会话.
vae*_*r-k 49
在python3 ipdb
(和pdb
)中有一个名为interact的命令.它可以用于:
启动一个交互式解释器(使用代码模块),其全局命名空间包含当前作用域中找到的所有(全局和本地)名称.
要使用它,只需interact
在pdb提示符下输入即可.除此之外,它对于应用跨越多行的代码以及避免意外触发其他pdb命令很有用.
Gar*_*yde 33
在Python(2.7.1)解释器或调试器(import pdb)中,您可以使用以下语法执行多行语句.
for i in range(5): print("Hello"); print("World"); print(i)
Run Code Online (Sandbox Code Playgroud)
注意:当我在解释器中时,我必须在代码执行之前按两次返回.但是,在调试器内部,我只需要返回一次.
fx-*_*rin 31
我的建议是使用IPython嵌入.
ipdb> from IPython import embed; embed()
Run Code Online (Sandbox Code Playgroud)
如果您希望在达到断点时执行几个命令,则会有特殊情况.然后是调试器命令commands
.它允许您输入多行命令,然后用end
关键字结束整个序列.更多(pdb) help commands
.
我不知道你是否能做到这一点,但这对于 ipdb 来说是一个很棒的功能。当然,您可以使用列表推导式,并执行简单的多行表达式,例如:
if y == 3: print y; print y; print y;
Run Code Online (Sandbox Code Playgroud)
您还可以预先编写一些函数来完成您需要完成的通常需要多行的操作。