在ArcMap中自终止Python脚本?


17

我已经尝试过sys.exit,但是在ArcMap 10中似乎不起作用。

有人知道怎么做吗?

Answers:


16

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()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.