Matplotlib在Windows上的Python 2.7.3中破坏了str()函数

3

这里是iPython中的问题示例。我已经尝试在其他Python shell中复现了此问题。

In [1]: a = 1e-6

In [2]: str(a)
Out[2]: '1e-06'

In [3]: import matplotlib as mpl

In [4]: str(a)
Out[4]: '1e-06'

In [5]: import matplotlib.pyplot as plt

In [6]: str(a)
Out[6]: '1e-06'

In [7]: plt.plot(1.0)
Out[7]: [<matplotlib.lines.Line2D at 0x262a850>]

In [8]: str(a)
Out[8]: '1e-06'

In [9]: plt.show()

In [10]: str(a)
Out[10]: 'ERR'

以下是相关版本号。

In [11]: mpl.__version__
Out[11]: '1.2.0'

In [12]: import numpy as np

In [13]: np.__version__
Out[13]: '1.6.2'

这个问题发生在我的XP专业实验室电脑上,运行Python 2.7.3和Microsoft Visual Express 2008 C++和Basic。我不知道如何开始追踪问题。


3
非常奇怪。我无法重现这种行为(Python 2.7.3,Windows 7,mpl和numpy的相同版本)。你提到了Visual Express。你是自己编译了matplotlib吗?你可以尝试输入str查看是否已将str设置为某些奇怪的对象,或者输入a本身,或者输入type(a)以查看它是否已更改。另外,你正在使用哪个后端? - BrenBarn
2
在调用 plt.show() 之前和之后,你能否打印出 type(a), id(a), type(str), id(str) 的值? - NPE
我提到Visual Express是因为我在安装几个包(包括matplotlib)时遇到了很大的麻烦。最终我只能从可执行文件中进行安装。我怀疑这个问题的根源在于我的matplotlib安装/C编译器。 - Nik Hartman
plt.show() 命令之前和之后,type(a), id(a), type(str), id(str) 的输出分别为 (float, 14616600, type, 505348768)(float, 14616600, type, 505348768) - Nik Hartman
@NikHartman:你尝试过完全删除matplotlib并从EXE安装程序重新安装吗? - BrenBarn
显示剩余4条评论
1个回答

1
Enthought通过存在来回答这个问题。虽然这不是最令人满意的解决方案,但我无法证明花费数天时间去追踪上述问题的根源是有道理的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接