python中的sys.excepthook行为

python中的sys.excepthook行为,python,exception,Python,Exception,我发现sys.excepthook的工作原理相当令人费解。 鉴于以下情况,我找不到一种方法来继续下去,以防钩子捕捉到异常。 简言之,我从来没有达到印刷声明,但我相信这是有可能继续在理论上。 返回True或False也没有帮助 import sys from shutil import copy from subprocess import Popen def my_except_hook(etype, value, tb): print("got an exception of ty

我发现sys.excepthook的工作原理相当令人费解。 鉴于以下情况,我找不到一种方法来继续下去,以防钩子捕捉到异常。 简言之,我从来没有达到印刷声明,但我相信这是有可能继续在理论上。 返回True或False也没有帮助

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'>)
('get a exception of type',)

不,理论上不可能继续<代码>sys.excepthook仅在整个堆栈展开且在程序即将退出之前未找到异常处理程序时调用。除了退出程序外,没有任何地方可以继续。您确定不是在寻找语句吗?

sys.excepthook实际上不打算强制为VB样式的“下一步出错时恢复”。也许有一种方法可以做到这一点,但您确实应该包装自己的代码来实现这一点。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
要从所有Python异常处理中获得更多信息,请参阅本文。