2014-02-26 81 views
5

考慮以下簡單的Python代碼:Matplotlib退出錯誤

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

什麼版本的mpl和什麼操作系統? – tacaswell

+0

mpl-1.2.0.win32-py3.3和Windows 7 – Sergiy

回答

5

問題是標準的Python解釋器沒有建立如何處理圖形用戶界面的知識。沒有深入細節,它看起來像matplotlib試圖關閉一個不存在的線程。

http://matplotlib.org/users/shell.html處有原因的解釋以及有關變通方法討論的指針。

最簡單的答案是使用IPython,它是matplotlib意識到作爲參考解釋。如果這不是一個選項,你可能需要深入挖掘。

+0

非常感謝!這是一個很好的資源。 – Sergiy

+1

謝謝holdenweb。我有一個類似的問題:在從命令行scirpt使用Tkinter GUI時調用plt.close()時,我會得到'不能調用'事件'命令'。我從[這裏]下載了[matplotlibrc文件](https://matplotlib.org/_static/matplotlibrc)(https://matplotlib.org/tutorials/introductory/customizing.html#sphx-glr-tutorials-introductory-customizing -py),放在我的腳本文件夾中並更改'interactive:True'錯誤消失了! – Alex

3

簡短回答:請確保您致電plt.close('all')


今天我有同樣的問題。在邊緣情況下,代碼會決定不生成圖形並提前退出函數,而不調用plt.close('all')(其中plt來自import matplotlib.pyplot as plt),這可能會出現。

我通過在邊緣情況下添加plt.close('all')來快速解決問題。

+1

沒有爲我工作 –