Python和GTK3错误打印到stderr,它们是什么



在我用Glade3应用程序制作的Python 2.7+GTK+3+PyGI+GUI中,我遇到了很多这样的错误:

(python.exe:81868): Gdk-CRITICAL **: gdk_device_get_source: assertion 'GDK_IS_DEVICE (device)' failed

Python中没有异常,程序中也没有任何错误。它们似乎是无害的,但为了清洁,我想阻止它们发生。

我注意到,例如,当激活和停用菜单项,或更改组合框上的选择时,就会发生这种情况。我试图设置一个回调,它对触发问题的事件不起任何作用,但没有更改。

那么,它们是什么意思呢?我该如何阻止他们?

当断言失败时,这样的消息是由使用Glib调试函数的代码发出的,请参见[1]。Glib和许多基于Glib构建的组件使用这些断言来报告无效状态、无效参数等。

通常,这样的消息会提示应用程序中存在错误,因此最好搜索原因。要执行此操作,请导出具有适当值的G_DEBUG环境,请参见[2]。在您的情况下,您将设置G_DEBUG=fatal-criticals,当发出关键消息时,程序将中止。如果您在gdb中运行应用程序,并在程序中止时打印回溯,那么您应该了解是什么导致了消息的发出。请记住为glib和gtk/gdk安装debuginfo包,以获得可用的回溯。

要禁止发送消息,如果您无法解决问题(可能是因为原因不是您的代码,而是其他库),可以查看g_log_set_handler,请参阅[3]。

  • [1]https://developer.gnome.org/glib/stable/glib-Warnings-and-Assertions.html
  • [2]https://developer.gnome.org/glib/stable/glib-running.html
  • [3]https://developer.gnome.org/glib/stable/glib-Message-Logging.html

最新更新