考虑以下简单的python代码:
import matplotlib.pyplot as mplot
mplot.plot([1,2,3,4],[1,2,3,4])
脚本运行时此脚本没有问题,但是如果我关闭python控制台(通过单击红色x),我会收到以下错误:
Fatal Python error: PyEval_RrestoreThread: NULL tstate
如果我使用ctrl + Z退出python控制台,则不会发生此问题。 在我看来,如果我存在第一种方式,有一些悬挂过程没有正确终止。我试图添加
mplot.close('all')
到脚本的末尾,但是我得到以下结果错误:
can't invoke "event" command: application has been destroyed while executing
"event generate $w <<ThemeChanged>>"
(procedure "ttk::ThemeChanged" line 6)
invoke from within
"ttk::ThemeChanged"
我正在运行Python 3.3 x86。 任何人都可以帮我理解这个问题吗?
谢谢!
答案 0 :(得分:5)
问题在于,标准Python解释器并非基于如何处理图形用户界面的知识构建。没有详细说明,看起来matplotlib试图关闭一个不存在的线程。
对http://matplotlib.org/users/shell.html的原因进行了解释,并指出了有关变通方法的讨论。
最简单的答案是使用IPython,这是matplotlib意识到的,参考解释。如果这不是一个选项,你可能需要深入挖掘。
答案 1 :(得分:3)
简短回答:请务必致电plt.close('all')
。
我今天遇到了同样的问题。这将出现在边缘情况下,代码将决定不生成图形并且会提前退出函数,而不调用plt.close('all')
(其中plt
来自import matplotlib.pyplot as plt
)。
我通过在边缘情况下添加plt.close('all')
来快速解决它。
答案 2 :(得分:0)
这发生在我身上。发布的答案都没有解决问题。我忽略了这条消息,一切都按预期工作。