Python PyGObject GLib.MainLoop()和异常

Python PyGObject GLib.MainLoop()和异常,python,glib,Python,Glib,我正在Python应用程序中使用PyGObject中的GLib.MainLoop(),我有一个问题 是否可以处理在循环中引发的Python异常。run() 例如,我正在使用GLib.MainContext.invoke_full()调用某个函数。: 导入回溯,gi 从gi.repository导入GLib 尝试: loop=GLib.MainLoop() def处理程序(自身): 打印('处理程序') 引发异常('from handler with love') loop.get_context

我正在Python应用程序中使用
PyGObject
中的
GLib.MainLoop()
,我有一个问题

是否可以处理在
循环中引发的Python异常。run()

例如,我正在使用GLib.MainContext.invoke_full()调用某个函数。:

导入回溯,gi 从gi.repository导入GLib 尝试: loop=GLib.MainLoop() def处理程序(自身): 打印('处理程序') 引发异常('from handler with love') loop.get_context().invoke_full(GLib.PRIORITY_默认值,处理程序,无) loop.run() 除例外情况外: 打印('catched!') 我认为
handler()
应该在
loop.run()中的某个地方调用,所以
raiseexception('fromshandlewithlove')
应该被
捕获,异常除外:
。然而,它不是:

$ 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
< > >代码> > HooLeR()<代码>,在无处调用(称为<代码> GLib <代码>代码> C>代码>代码),未被<代码>捕获,除了异常:< /代码> ./P>
是否可以捕获在GLib.MainLoop.run()中引发的所有Python异常
?我有十几个这样调用的处理程序,所以我必须添加相同的
try:。。。除了一个例外:。。。ExceptNotherException:…
包装到每个处理程序中。

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

您可以通过sys.excepthook处理这些类型的错误。我们已经知道了这一点。这就是为什么会有人问这个问题:如何更改它?通常,未捕获的异常会导致解释器退出。由于这种情况不会发生,因此必须有某种东西捕获并打印它,因此必须有一种方法通过子类化或猴子补丁来覆盖该东西。但通常该处理程序已经导致解释器退出,那么为什么它不在信号处理程序中这样做呢?它是如何被阻止的?对我来说似乎是错误的,因为未处理的异常将使应用程序处于未定义状态。