使用ipython和%pdb on访问调试会话中的变量

时间:2010-11-15 17:53:07

标签: python ipython

我是ipython的新手,我正在尝试使用ipython来调试我的代码。我做了:

[1]: %pdb
Automatic pdb calling has been turned ON

然后

In [2]: %run mycode.py

在代码中,我有1/0所以它引发异常并自动进入调试会话。

ZeroDivisionError: float division

ipdb> variable
array([ 0.00704313, -1.34700666, -2.81474391])

所以我可以访问变量。但是当我做以下事情时:

ipdb> b = variable
*** The specified object '= variable' is not a function or was not found along sys.path.

但这有效:

ipdb> b = self.X

4 个答案:

答案 0 :(得分:9)

b用于设置断点。因此,b后面的任何内容都应该是函数或行号。

如果您输入ipdb> help,您将看到完整的命令列表(保留字)。

您可以使用xy作为变量:

ipdb> y = variable

ipdb> exec 'b = variable'

答案 1 :(得分:2)

我认为你需要使用'!' (pdb documentation): !声明 在当前堆栈帧的上下文中执行(一行)语句。除非语句的第一个单词类似于调试器命令,否则可以省略感叹号。要设置全局变量,可以在赋值命令的前面加上同一行的全局语句,例如:

global list_options; list_options = ['-l']

答案 2 :(得分:1)

在python3中,您可以使用单个感叹号来覆盖ipdb命令

!b

答案 3 :(得分:0)

你可以使用

locals()["b"] = variable