Python 停止程序处理并停止回溯?
我有一个程序,一旦某个条件被触发,需要完全停止处理-类似于这个问题: 但是,在我的例子中,我希望捕获sys.exit()生成的回溯,最重要的是停止处理超出该点的任何代码块。有人能帮忙吗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:
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。