【发布时间】:2019-02-13 09:36:45
【问题描述】:
我在我的 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: ... except OneException: ... exceptAnotherException: ... 包装器。
【问题讨论】: