编辑
不幸的是,目前这是不可能的。我发现这是Spyder 中的一个错误。开发人员仍在想办法解决这个问题。
目标
在调试代码时可视化数据(我也想使用 Spyder!)。
尝试 #1:从 Spyder 的 IPython 运行 foo.bar
使用以下代码创建一个名为 foo.py 的文件:
from ipdb import set_trace as st import matplotlib.pyplot as plt def bar(): st()
在 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()
情节保持在“冻结”状态。如果我退出调试器,绘制更新。如果我尝试关闭绘图,IPython 会崩溃。显然两者都是不可取的,也不允许我在调试时看到数据。
尝试 #2:从命令行从 IPython 运行 foo.bar
- 使用与尝试 #1 中相同的 foo.py:
从命令行打开 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()
程序按我的预期显示情节。但我想使用 Spyder。
尝试 #3:从命令行从 IPython 运行 baz.bar
编写 baz.py:
from ipdb import set_trace as st import matplotlib.pyplot as plt st()
从命令行打开 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.
然后 Spyder 完全冻结。
有什么建议么?
注意#1:在我的完整代码中,我有很多文件和很多函数,所以在一个没有函数的脚本中将它们混合在一起是不可行的。
注意 #2:使用任何 matplotlib 交互式命令(例如 ion()、interactive(True) 等)都没有效果。
注意 #3:Spyder 版本 2.0.12、Python 2.6、matplotlib 1.0.1。