我有一种情况,我想利用自定义的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中的活动异常,这样就不会导致程序退出?
答案 0 :(得分:4)
没有。在调用sys.excepthook
时,异常在顶级已经未被捕获,程序将在sys.excepthook
完成其工作后退出。 (参见the documentation。)一般情况下,Python中不能恢复异常:你可以在捕获它们的地方处理它们,你不能只是从它们发生的地方继续。有关讨论,请参阅this thread。
编辑:根据您的评论,听起来您并不是想要捕获整个程序中的所有异常。您只想捕获某些对象的未定义属性查找。如果是这种情况,只需在您的班级上定义__getattr__
。