python中的sys.excepthook行为

时间:2012-07-06 15:49:14

标签: python exception

我发现sys.excepthook如何工作令人费解。 鉴于以下内容,我找不到一种方法可以继续运行以防异常被钩子捕获。 总之,我从未达到印刷声明,但我确信理论上可以继续。 回归真或假也无济于事?

import sys
from shutil import copy
from subprocess import Popen


def my_except_hook(etype, value, tb):
    print("got an exception of type", etype)


if __name__ == '__main__':
    sys.excepthook = my_except_hook
    copy('sdflsdk')
    print("here")
    Popen('sdflkjdklsdj')

然后输出:

('got an exception of type', <type 'exceptions.TypeError'>)

2 个答案:

答案 0 :(得分:3)

不,理论上不可能继续下去。 sys.excepthook仅在整个堆栈展开并且在程序退出之前未找到异常处理程序时调用。除了退出该计划外,没有什么可以继续的。你确定你不是在寻找try...except陈述吗?

答案 1 :(得分:2)

sys.excepthook实际上并不打算被强制转换为VB样式“On Error Resume Next”。可能有办法做到这一点,但你应该真的包装自己的代码来做到这一点。 system.excepthook是为python交互式解释器之类的东西设计的,这样它们就可以打印异常并返回到交互式shell。要做你要求的简历行为,你应该考虑做这样的事情:

import sys
from shutil import copy
from subprocess import Popen

if __name__ == '__main__':
    try:
        copy('sdflsdk')
    except:
        pass
    print("here")
    try:
        Popen('sdflkjdklsdj')
    except:
        pass