Answers:
从ArcPy示例中,似乎sys.exit()
是尽早终止脚本的正确方法。
在Python文档指出,sys.exit()
:
是通过引发SystemExit异常实现的,因此可以使用try语句的finally子句指定的清除操作,并且有可能在外部级别拦截出口尝试。
解决此问题的简单方法是将脚本包装在异常处理程序中:
import sys
import arcpy
try:
#do stuff
sys.exit(0)
except SystemExit:
pass
但是,这并不是特别优雅,需要对整个项目进行重组,更不用说缩进了。另外,在不太可能发生的情况下,代码的另一部分引发了SystemExit
异常,您将永远不会知道它。另一个优雅但也许更可取的解决方案是将对sys.exit()的调用包装在另一个函数中:
import sys
import arcpy
def finish(arg=None):
try:
sys.exit(arg)
except SystemExit:
pass
#do stuff
finish()
现在,您可以调用finish()
,,finish(1)
或者finish('Error message')
就像您希望能够调用sys.exit()一样。
当然,我们可能想在其他情况下使用异常进食方法,并且由于这是Python,因此我们可以泛化并创建有用的多用途装饰器:
import sys
import arcpy
def eat_exception(fn, exception):
def safe(*v, **k):
try:
fn(*v, **k)
except exception:
pass
return safe
finish = eat_exception(sys.exit, SystemExit)
#do stuff
finish()