在启用 %pdb 的 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 个回答
3
在Python3中,你可以用一个感叹号来覆盖ipdb的命令。
!b
3
我觉得你需要用到'!'(pdb 文档):
! 语句
在当前的堆栈框架中执行这条(单行)语句。感叹号可以省略,除非语句的第一个词看起来像是调试命令。要设置一个全局变量,你可以在同一行的赋值命令前加上 global 语句,例如:
global list_options; list_options = ['-l']
9
b
是用来设置断点的。所以在 b
后面跟着的应该是一个函数名或者行号。
如果你输入 ipdb> help
,你会看到所有命令(保留字)的完整列表。
你可以使用,比如说 x
或者 y
作为变量:
ipdb> y = variable
或者
ipdb> exec 'b = variable'