在启用 %pdb 的 IPython 调试会话中访问变量

7 投票
4 回答
8264 浏览
提问于 2025-04-16 07:06

我刚接触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'

撰写回答