Python和GTK3错误打印到stderr,它们是什么?
在我的Python 2.7 + GTK+3 + PyGI + 用Glade3制作的图形界面应用中,我遇到了很多这样的错误:
(python.exe:81868): Gdk-CRITICAL **: gdk_device_get_source: assertion 'GDK_IS_DEVICE (device)' failed
在Python中没有发生异常,程序也没有出现任何问题。这些错误看起来无害,但为了保持代码的整洁,我想阻止它们的出现。
我注意到,比如在激活和停用菜单项,或者在下拉框中改变选择时,会出现这些错误。我尝试设置一个什么都不做的回调函数来处理触发问题的事件,但没有任何改变。
那么,这些错误是什么意思?我该如何阻止它们呢?
1 个回答
2
这些信息是由使用Glib调试功能的代码发出的,具体情况可以参考[1],当某个条件检查失败时就会出现这些信息。这些条件检查是Glib和许多基于Glib构建的组件用来报告无效状态、无效参数等问题的。
通常,这些信息暗示着你的应用程序可能存在错误,因此查找原因是个好主意。要做到这一点,你可以设置一个名为G_DEBUG
的环境变量,给它一个合适的值,具体可以看[2]。在你的情况下,你可以设置G_DEBUG=fatal-criticals
,这样当出现关键性信息时,程序就会停止运行。如果你在gdb
中运行你的应用程序,并在程序停止时打印出调用栈,你就能大致了解是什么导致了这些信息的出现。记得安装glib和gtk/gdk的调试信息包,这样才能获得有用的调用栈信息。
如果你无法修复这个问题(可能是因为问题不在你的代码中,而是在其他库中),你可以考虑使用g_log_set_handler
来禁用这些信息的输出,具体可以参考[3]。