我在我的 Python 应用程序中使用 PyGObject
的 GLib.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()
在不知何处调用(从 GLib
的 C
代码调用?),但没有被捕获通过 except Exception:
.
是否有可能捕获 GLib.MainLoop.run()
中引发的所有 Python 异常?我有许多这样调用的处理程序,所以我必须添加相同的 try: ... 除了 OneException: ... exceptAnotherException: ...
包装器到每个处理程序中。
最佳答案
不,不传播异常。它被捕获并打印出来。 Python 回调中没有异常会导致循环退出。
关于python - PyGObject GLib.MainLoop() 和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54666827/