当我执行时
#!/usr/bin/env python
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.show()
(还有更复杂的例子)我得到
/usr/local/lib/python3.4/dist-packages/
matplotlib/backends/backend_gtk3.py:215: Warning:
Source ID 7 was not found when attempting to remove it
GLib.source_remove(self._idle_event_id)
造成这种情况的原因是什么?我该如何摆脱这些警告?
我知道我可以使用
import warnings
warnings.simplefilter("ignore")
消除所有警告,但这不是我所要求的。我想要警告,但没有来自matplotlib的警告(尤其是上面的警告)。
GLib.source_remove
不成功,因为之前执行的self.close_event()
可能已经完成了任务。
此提交应该可以解决您的问题。它是从2月23日开始的。您可以等待下一个版本,也可以手动应用修补程序。
使用plt.close()
解决此问题。
很抱歉提前回答了一个老问题,但在运行Linux发行版的机器上通过pip
安装Python 3.6.9和matplotlib
后,我遇到了类似的问题。我的意图是在上述机器上升级Python后,能够重新运行涉及pyplot
的旧脚本。当脚本运行到完成并提供预期输出时,我总是收到这样的警告:
/home/jefgrailet/.local/lib/python3.6/site-packages/matplotlib/backends/backend_gtk3.py:195: Warning: Source ID 8 was not found when attempting to remove it
GLib.source_remove(self._idle_draw_id)
在使用来自pyplot
的savefig()
方法时(我想show()
方法也会出现类似的问题)。警告中提到的行对应于backend_gtk3.py
:中的此方法
def destroy(self):
#Gtk.DrawingArea.destroy(self)
self.close_event()
if self._idle_draw_id != 0:
GLib.source_remove(self._idle_draw_id)
我查阅了matplotlib GitHub,检查是否有相同脚本的最新版本,或者是否知道这个问题,结果发现上面方法的当前实现只依赖于self.close_event()
指令,即GLib.source_remove()
是不必要的。
因此,我对上面代码中的最后2行进行了注释,并保存了更改编辑后,我可以运行脚本而不会收到任何警告。我希望这能帮助遇到类似问题的人。