Я использую GLib.MainLoop()
из PyGObject
в моем приложении Python и у меня есть вопрос.
Возможно ли обработать исключение Python, которое возникает в loop.run()
?
ДляНапример, я вызываю некоторую функцию, используя 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:
.
Можно ли перехватить все исключения Python, которые возникают в GLib.MainLoop.run()
?У меня так называется дюжина обработчиков, поэтому мне нужно добавить одну и ту же оболочку try: ... except OneException: ... exceptAnotherException: ...
в каждый обработчик.