我不完全确定你在问什么,据我所知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()
可以完成这项工作。