我在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 lovehandler()似乎是在不知名的地方调用的(从GLib的C代码中调用?),而不是被except Exception:捕获。
是否有可能捕获在GLib.MainLoop.run()中引发的所有Python异常?我有一打这样的处理程序,所以我必须在每个处理程序中添加相同的try: ... except OneException: ... exceptAnotherException: ...包装器。
发布于 2019-02-13 19:50:59
否,不传播异常。它被捕获并打印出来。Python回调中的任何异常都不会导致循环退出。
发布于 2019-02-19 03:44:55
您可以通过sys.excepthook处理这些类型的错误
https://stackoverflow.com/questions/54666827
复制相似问题