Pet*_*r D 18 python debugging matplotlib spyder pdb
编辑
不幸的是,目前这是不可能的.我发现这是Spyder的一个错误.开发人员仍在研究如何处理这个问题.
在调试代码时可视化数据(我也想使用Spyder!).
使用以下代码创建名为foo.py的文件:
from ipdb import set_trace as st
import matplotlib.pyplot as plt
def bar():
st()
Run Code Online (Sandbox Code Playgroud)在IPython中,键入以下内容:
In [4]: import foo
In [5]: foo.bar()
--Return--
None
> somewhere_over_the_rainbow\foo.py(5)bar()
3
4 def bar():
----> 5 st()
ipdb> plt.plot([1, 2], [3, 4])
[<matplotlib.lines.Line2D object at 0x05CA8E90>]
ipdb> plt.show()
Run Code Online (Sandbox Code Playgroud)情节仍处于"冻结"状态.如果我退出调试器,则绘制更新.如果我试图关闭情节,IPython会崩溃.显然两者都不受欢迎,也不让我在调试时看到数据.
从命令行打开IPython:
In [4]: import foo
In [5]: foo.bar()
--Return--
None
> somewhere_over_the_rainbow\foo.py(5)bar()
3
4 def bar():
----> 5 st()
ipdb> plt.plot([1, 2], [3, 4])
[<matplotlib.lines.Line2D object at 0x03904070>]
ipdb> plt.show()
Run Code Online (Sandbox Code Playgroud)程序显示我预期的情节.但我想用Spyder.
写baz.py:
from ipdb import set_trace as st
import matplotlib.pyplot as plt
st()
Run Code Online (Sandbox Code Playgroud)从命令行打开IPython:
In [4]: import baz
--Return--
None
> somewhere_over_the_rainbow\baz.py(4)<module>()
2 import matplotlib.pyplot as plt
3
----> 4 st()
ipdb> plt.
Run Code Online (Sandbox Code Playgroud)然后Spyder完全冻结了.
有什么建议?
注意#1:在我的完整代码中,我有许多文件和许多函数,因此在一个没有函数的脚本中将它们混合在一起是不可行的.
注意#2:使用任何matplotlib交互式命令(例如ion(),交互式(True)等)都没有效果.
注意#3:Spyder版本2.0.12,Python 2.6,matplotlib 1.0.1.
(Spyder dev here)注意:很抱歉在这么长时间之后回答这个问题,但也许别人会发现它有用.
现在(11月13日)的最佳解决方案是在显示绘图后使用pause(n)命令matplotlib(其中n是几秒)pdb.这是一个例子:
from matplotlib.pyplot import imshow, pause
import numpy as np
x = np.random.rand(4,5)
imshow(x)
pause(1)
Run Code Online (Sandbox Code Playgroud)
看看我们以前的开发者之一Jed Ludlow的评论,他在这里描述了这个解决方案.
我发现您现在实际上可以使用 Spyder 在调试模式下绘图。这是令人惊讶的简单。
ipdb>pylab.plot(x,y)
ipdb>pylab.show()
Run Code Online (Sandbox Code Playgroud)
......
ion()导入时考虑过功能吗pylab?这应该允许在pdb.
import pylab
import pdb
pylab.ion()
tst_xdata = [1,2,3,4,5,6]
tst_ydata = [1,1,1,1,1,1]
pylab.plot(tst_xdata,tst_ydata)
pylab.draw()
pdb.set_trace()
for idx in range(3):
tst_ydata = [elem+2 for elem in tst_ydata]
pylab.plot(tst_xdata,tst_ydata)
pylab.draw()
pylab.show()
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于我的机器(Ubuntu 11.04、Python 2.7、SciPy bersion 0.8.0),甚至可以在 Eclipse 中使用 PyDev 运行。
| 归档时间: |
|
| 查看次数: |
6922 次 |
| 最近记录: |