2012-07-06 32 views
3

我发现sys.excepthook的工作方式令人费解。 鉴于以下情况,我并没有找到一种方法,以防止异常被钩住。 总之,我从来没有达到印刷声明,但我相信理论上可以继续。 返回正确或错误也没有帮助吗?python中的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

为了获得更多的(信息)出你的所有的Python异常处理参见[Python的旅游#2:以异常(HTTP:// boodebr.org/main/python/tourist/taking-exception)文章。 – martineau 2012-07-06 16:35:02

回答

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 
3

不,这是不可能继续在理论上。 sys.excepthook仅在整个堆栈解开时才被调用,并且在程序退出之前没有找到异常处理程序。没有什么地方可以继续,除了退出计划。你确定你不是在寻找try...except声明吗?