为什么 Python 的 pdb 和代码模块与 Theano 的交互方式不同

Why do Python's pdb and code modules interact differently with Theano

我一直在尝试调试一些 Theano 代码,为此我使用 Keras 作为前端。我一直在做的是插入:

import pdb
pdb.set_trace()

import code
code.interact(local=locals(), banner='==>")

在我想开始与我的代码交互以查看正在发生的事情并交互式测试解决方案的时候。但是,当我使用 pdb 与我的代码交互时,我看到了这种奇怪的行为:

--Return--
> /home/me/Projects/keras_expts2/cifar10_cnn_ecoc2a.py(174)<module>()->None
-> pdb.set_trace()
(Pdb) import theano.tensor as T
(Pdb) a=T.fvector()
(Pdb) type(a)
*** NameError: name 'a' is not defined
(Pdb) T
<module 'theano.tensor' from '/home/smgutstein/Downloads/Theano/theano/tensor/__init__.pyc'>
(Pdb) T.fvector
TensorType(float32, vector)

因此,pdb 知道 T 和 fvector 是什么,它只是不会创建 Theano fvector 变量。

但是,使用代码,我看到了这个(更好的)行为:

==>
>>> import theano.tensor as T
>>> a = T.fvector()
>>> type(a)
<class 'theano.tensor.var.TensorVariable'>
>>> T.fvector
TensorType(float32, vector)
>>> 

为什么会有这种差异?

因为 a 是一个 pdb 命令(alias 的缩写),a=T.fvector() 在您尝试 运行 该命令而不是Python 声明。