所以我正在运行一个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循环?
在调试我的代码时,我想使用列表理解.但是,当我在函数内部时,似乎无法从调试器中评估列表理解.
我使用的是Python 3.4.
脚本内容:
$ cat test.py
#!/usr/bin/python
def foo():
x = [1, 2, 3, 3, 4]
print(x)
foo()
Run Code Online (Sandbox Code Playgroud)
交互式调试:
$ python3 -mpdb test.py
> /tmp/test.py(3)<module>()
-> def foo():
(Pdb) step
> /tmp/test.py(8)<module>()
-> foo()
(Pdb)
--Call--
> /tmp/test.py(3)foo()
-> def foo():
(Pdb)
> /tmp/test.py(4)foo()
-> x = [1, 2, 3, 3, 4]
(Pdb)
> /tmp/test.py(6)foo()
-> print(x)
(Pdb) p [x for _ in range(1)]
*** NameError: name 'x' is not defined
(Pdb) p x
[1, 2, 3, 3, …Run Code Online (Sandbox Code Playgroud)