如何停用"警告:尝试删除源 ID 510 时找不到源 ID 510 - GLib.source_remove(self._idle_event_id)"?



当我执行时

#!/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)

在使用来自pyplotsavefig()方法时(我想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行进行了注释,并保存了更改编辑后,我可以运行脚本而不会收到任何警告。我希望这能帮助遇到类似问题的人。

最新更新