我在Python应用程序中使用GLib.MainLoop()
中的PyGObject
,并且有疑问。
是否可以处理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
的{{1}}代码中调用的?),而没有被C
捕获。
是否可以捕获except Exception:
中引发的所有Python异常?我有一打这样的处理程序,所以我必须在每个处理程序中添加相同的GLib.MainLoop.run()
包装器。
答案 0 :(得分:1)
否,不会传播异常。它被捕获并打印。 Python回调中没有异常会导致循环退出。
答案 1 :(得分:0)
您可以通过sys.excepthook