首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyGObject GLib.MainLoop()和异常

PyGObject GLib.MainLoop()和异常
EN

Stack Overflow用户
提问于 2019-02-13 17:36:45
回答 2查看 663关注 0票数 2

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

是否可以处理在loop.run()中引发的Python异常

例如,我使用GLib.MainContext.invoke_full()调用一些函数

代码语言:javascript
复制
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:捕获。然而,它不是:

代码语言:javascript
复制
$ 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()似乎是在不知名的地方调用的(从GLibC代码中调用?),而不是被except Exception:捕获。

是否有可能捕获在GLib.MainLoop.run()中引发的所有Python异常?我有一打这样的处理程序,所以我必须在每个处理程序中添加相同的try: ... except OneException: ... exceptAnotherException: ...包装器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-13 19:50:59

否,不传播异常。它被捕获并打印出来。Python回调中的任何异常都不会导致循环退出。

票数 0
EN

Stack Overflow用户

发布于 2019-02-19 03:44:55

您可以通过sys.excepthook处理这些类型的错误

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54666827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档