我是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
答案 0 :(得分:9)
b
用于设置断点。因此,b
后面的任何内容都应该是函数或行号。
如果您输入ipdb> help
,您将看到完整的命令列表(保留字)。
您可以使用x
或y
作为变量:
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