Python 停止程序处理并停止回溯?

Python 停止程序处理并停止回溯?,python,traceback,Python,Traceback,我有一个程序,一旦某个条件被触发,需要完全停止处理-类似于这个问题: 但是,在我的例子中,我希望捕获sys.exit()生成的回溯,最重要的是停止处理超出该点的任何代码块。有人能帮忙吗 try: a = 'i' / 1 print 'Does this work yet?' except TypeError: print "I should stop processing now" try: sys.exit() except:

我有一个程序,一旦某个条件被触发,需要完全停止处理-类似于这个问题:

但是,在我的例子中,我希望捕获sys.exit()生成的回溯,最重要的是停止处理超出该点的任何代码块。有人能帮忙吗

try:
    a = 'i' / 1
    print 'Does this work yet?'
except TypeError:
    print "I should stop processing now"
    try:
        sys.exit()
    except:
        pass
print 'I did not stop processing '

您可以利用这样一个事实,即系统退出异常并非源于:


您可以利用这样一个事实,即系统退出异常并非源于:


我不完全确定您在问什么,据我所知,
sys.exit()
不会生成回溯。如果尝试按原样执行代码,
sys.exit()
会引发未处理的NameError异常,因为您尚未导入“sys”模块。使用try/except块包围对sys.exit()的调用将捕获NameError异常,但它也将捕获sys.exit()引发的正常异常,如文档所示:

退出Python。这是通过提升SystemExit来实现的 异常,因此try的finally子句指定的清理操作 声明得到尊重,并且可以拦截出口 在外层尝试

这是一个一旦遇到错误就停止处理的版本

import sys

try:
    a = 'i' / 1
    print 'Does this work yet?'
except TypeError:
    print "I should stop processing now"
    sys.exit()
print 'I did not stop processing '
如果此代码位于主模块中,我建议将入口点代码包装如下:

import sys

def main():
    try:
        a = 'i' / 1
        print 'Does this work yet?'
    except TypeError:
        print "I should stop processing now"
        return 1
    print 'I did not stop processing '
    return 0

if __name__ == "__main__": sys.exit(main())
这样,您只需调用一次sys.exit(),它将返回一个错误代码,指示是否存在问题。如果代码不在顶级入口点,我建议您抛出异常,直到它到达main()方法,然后返回错误代码值。您可以将真正的异常包装在必须定义的新“StopMyApplicationException”中


哦,如果你想打印回溯,你可以使用
traceback
模块,比如
traceback.print\u exc()
就可以了。

据我所知,
sys.exit()
不会生成回溯。如果尝试按原样执行代码,
sys.exit()
会引发未处理的NameError异常,因为您尚未导入“sys”模块。使用try/except块包围对sys.exit()的调用将捕获NameError异常,但它也将捕获sys.exit()引发的正常异常,如文档所示:

退出Python。这是通过提升SystemExit来实现的 异常,因此try的finally子句指定的清理操作 声明得到尊重,并且可以拦截出口 在外层尝试

这是一个一旦遇到错误就停止处理的版本

import sys

try:
    a = 'i' / 1
    print 'Does this work yet?'
except TypeError:
    print "I should stop processing now"
    sys.exit()
print 'I did not stop processing '
如果此代码位于主模块中,我建议将入口点代码包装如下:

import sys

def main():
    try:
        a = 'i' / 1
        print 'Does this work yet?'
    except TypeError:
        print "I should stop processing now"
        return 1
    print 'I did not stop processing '
    return 0

if __name__ == "__main__": sys.exit(main())
这样,您只需调用一次sys.exit(),它将返回一个错误代码,指示是否存在问题。如果代码不在顶级入口点,我建议您抛出异常,直到它到达main()方法,然后返回错误代码值。您可以将真正的异常包装在必须定义的新“StopMyApplicationException”中

哦,如果你想打印回溯,你可以使用
traceback
模块,类似于
traceback.print_exc()
的模块将完成这项工作。

你可以访问
sys.exit
生成的异常,但它不会有回溯

try:
    sys.exit()
except SystemExit as e:
    # do what you want with e, e.g.
    traceback.print_exc(e)
    raise
except
子句中的裸
raise
会重新引发捕获的异常。

您可以访问
sys.exit
生成的异常,但它不会进行回溯

try:
    sys.exit()
except SystemExit as e:
    # do what you want with e, e.g.
    traceback.print_exc(e)
    raise

except
子句中的裸
raise
重新引发捕获的异常。

我还尝试了try-except代码块、嵌套try-except代码块和raise-SystemExit。我还尝试了try-except代码块、嵌套try-except代码块和raise-SystemExit。