是否可以取消尚未捕获的异常?

时间:2013-02-21 01:31:27

标签: python exception-handling

我有一种情况,我想利用自定义的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..."

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

1 个答案:

答案 0 :(得分:4)

没有。在调用sys.excepthook时,异常在顶级已经未被捕获,程序将在sys.excepthook完成其工作后退出。 (参见the documentation。)一般情况下,Python中不能恢复异常:你可以在捕获它们的地方处理它们,你不能只是从它们发生的地方继续。有关讨论,请参阅this thread

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