1

我有一种情况,我想使用自定义 sys.excepthook。当程序抛出异常时, sys.except 钩子会被调用并做一些事情。

例子:

import sys
def ehook(exctype, value, traceback):
    t = 'Keys'
    if exctype == AttributeError and value.args[0].split("'")[1] == t:
        print "t %s" % (t,)
    else:
        sys.__excepthook__(exctype, value, traceback)

sys.excepthook = ehook



class Keys():
    @staticmethod
    def x():
        print "this is Keys.x()"


if __name__ == "__main__":
    Keys.x()
    Keys.noexist()
    print "I want to continue here and beyond..."

有没有办法可以取消异常钩子中的活动异常,这样它就不会导致程序退出?

4

1 回答 1

4

不。在sys.excepthook调用时,异常已经在顶层未被捕获,程序将在sys.excepthook完成工作后退出。(请参阅文档。)通常,Python 中的异常是不可恢复的:您已经在捕获它们的地方处理它们,您不能只从它们发生的地方继续。请参阅此线程进行一些讨论。

编辑:根据您的评论,听起来您并没有试图捕获整个程序中的所有异常。您只想在某些对象上捕获未定义的属性查找。如果是这种情况,只需__getattr__在您的类上定义 a 。

于 2013-02-21T01:50:07.377 回答