我发现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'>)
答案 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