python - PyGObject GLib.MainLoop() 和异常

标签 python glib

我在我的 Python 应用程序中使用 PyGObjectGLib.MainLoop() 并有一个问题。

是否可以处理 loop.run() 中引发的 Python 异常?

例如,我正在使用 GLib.MainContext.invoke_full() 调用一些函数:

import traceback, gi
from gi.repository import GLib

try:
    loop = GLib.MainLoop()

    def handler(self):
        print('handler')
        raise Exception('from handler with love')

    loop.get_context().invoke_full(GLib.PRIORITY_DEFAULT, handler, None)
    loop.run()

except Exception:
    print('catched!')

我认为 handler() 应该在 loop.run() 中的某处调用,所以 raise Exception('from handler with love') 应该被 except Exception: 捕获。然而,它不是:

$ python test.py 
handler
Traceback (most recent call last):
  File "test.py", line 9, in handler
    raise Exception('from handler with love')
Exception: from handler with love

似乎 handler() 在不知何处调用(从 GLibC 代码调用?),但没有被捕获通过 except Exception:.

是否有可能捕获 GLib.MainLoop.run() 中引发的所有 Python 异常?我有许多这样调用的处理程序,所以我必须添加相同的 try: ... 除了 OneException: ... exceptAnotherException: ... 包装器到每个处理程序中。

最佳答案

不,不传播异常。它被捕获并打印出来。 Python 回调中没有异常会导致循环退出。

关于python - PyGObject GLib.MainLoop() 和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54666827/

相关文章:

c++ - 在 Qt 中禁用 Glib 事件循环 - QT_NO_GLIB 未生效

python - 如何以编程方式在 apache beam python 中提供凭据?

python - 如何在 Python 中使用正则表达式非捕获组格式

python - 无法在python中pip或pip3安装guidelda库

C程序连接WIFI

daemon - 哪些非GUI程序使用glib?

c - 找不到 glib.h 和 gtk.h

c - glibconfig.h 没有这样的文件或目录

python - 如何告诉 distutils 使用 gcc?

python - Python 的 numpy 中的 "zip()"相当于什么?