如何在pdb中定义一个新函数
How to define a new function in pdb
为什么我在运行pdb
时不能定义新函数?
例如取myscript.py:
#!/gpfs0/export/opt/anaconda-2.3.0/bin/python
print "Hello World"
print "I see you"
如果我 运行 python -m pdb myscript.py
并尝试以交互方式定义一个新函数:
def foo():
我收到错误:
*** SyntaxError: unexpected EOF while parsing (<stdin>, line 1)
这是为什么?
我认为它不支持多行输入。您可以通过在 pdb 中生成交互式会话来解决此问题。完成交互式会话后,使用 Ctrl+D 退出。
>>> import pdb
>>> pdb.set_trace()
(Pdb) !import code; code.interact(local=vars())
(InteractiveConsole)
In : def foo():
...: print('hello in pdb')
...:
In : # use ctrl+d here to return to pdb shell...
(Pdb) foo()
hello in pdb
您可以使用 ;
而不是缩进在一行语句中定义您的函数,如下所示:
(Pdb) def foo(): print 'Hello world'; print 'I see you'
(Pdb) foo()
Hello world
I see you
我能够从 pdb
命令行导入 python 模块。
如果您可以导入 python 个模块,那么您应该能够在文件中定义您的函数并只导入该文件。
如果您的应用程序恰好有 IPython 作为依赖项,您可以直接从 ipdb 进入功能丰富的 IPython REPL:
import IPython; IPython.embed()
从内部来看,如果您使用运行 IPython的魔法命令whos
,您应该会在当前pdb
帧中看到所有本地定义的变量。
为什么我在运行pdb
时不能定义新函数?
例如取myscript.py:
#!/gpfs0/export/opt/anaconda-2.3.0/bin/python
print "Hello World"
print "I see you"
如果我 运行 python -m pdb myscript.py
并尝试以交互方式定义一个新函数:
def foo():
我收到错误:
*** SyntaxError: unexpected EOF while parsing (<stdin>, line 1)
这是为什么?
我认为它不支持多行输入。您可以通过在 pdb 中生成交互式会话来解决此问题。完成交互式会话后,使用 Ctrl+D 退出。
>>> import pdb
>>> pdb.set_trace()
(Pdb) !import code; code.interact(local=vars())
(InteractiveConsole)
In : def foo():
...: print('hello in pdb')
...:
In : # use ctrl+d here to return to pdb shell...
(Pdb) foo()
hello in pdb
您可以使用 ;
而不是缩进在一行语句中定义您的函数,如下所示:
(Pdb) def foo(): print 'Hello world'; print 'I see you'
(Pdb) foo()
Hello world
I see you
我能够从 pdb
命令行导入 python 模块。
如果您可以导入 python 个模块,那么您应该能够在文件中定义您的函数并只导入该文件。
如果您的应用程序恰好有 IPython 作为依赖项,您可以直接从 ipdb 进入功能丰富的 IPython REPL:
import IPython; IPython.embed()
从内部来看,如果您使用运行 IPython的魔法命令whos
,您应该会在当前pdb
帧中看到所有本地定义的变量。