在我用 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-ritics
,并且当发出关键消息时程序将中止。如果您随后在 gdb 中运行应用程序并在程序中止时打印回溯,您应该了解是什么导致了消息的发出。请记住安装 glib 和 gtk/gdk 的 debuginfo 包以获得可用的回溯。
要禁止发出消息,如果您无法解决问题(可能是因为原因不是您的代码,而是其他库),您可以查看g_log_set_handler
,参见[3]。
关于Python 和 GTK3 错误打印到 stderr,它们是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22118539/