Matplotlib退出错误

5
考虑下面这段简单的Python代码:
```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。能否有人帮我理解这个问题?谢谢!

mpl 是哪个版本的?操作系统是什么? - tacaswell
mpl-1.2.0.win32-py3.3和Windows 7 - Sergiy
虽然您没有提到您使用TkAgg后端还是Tkinter,但“ttk :: ThemeChanged”错误是Tk中的一个错误:https://core.tcl-lang.org/tk/info/310c74ecf440 - chrstphrchvz
3个回答

5
问题在于标准Python解释器没有处理图形用户界面的知识。不详细说明,看起来matplotlib试图关闭不存在的线程。
关于原因的解释可以在http://matplotlib.org/users/shell.html找到,并提供了有关解决方法的讨论指针。
最简单的答案是使用IPython,正如参考所述,它具有对matplotlib的认知。如果这不是一个选项,您可能需要深入挖掘。

非常感谢!这是一个很棒的资源。 - Sergiy
1
谢谢holdenweb。我遇到了类似的问题:在使用Tkinter GUI从命令行脚本调用plt.close()时,我会得到“无法调用'event'命令”的错误。我从这里下载了matplotlibrc文件,将其放置在我的脚本文件夹中,并更改了interactive: True。之后错误消失了! - Alex

3

简短回答:确保您调用plt.close('all')


今天我遇到了同样的问题。在一个边缘情况下,代码将决定不生成图表,并且会提前退出函数,而不调用plt.close('all')(其中plt来自import matplotlib.pyplot as plt)。

我通过在边缘情况下添加plt.close('all')来快速解决这个问题。


0

我也遇到过这种情况。所有发布的答案都没有解决问题。我忽略了这个消息,一切都按预期工作。


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