¿Script Python de terminación automática en ArcMap?

17

Lo he intentado sys.exit, pero no parece funcionar en ArcMap 10.

¿Alguien sabe cómo hacerlo?

Curtidor
fuente

Respuestas:

16

A partir de los ejemplos de ArcPy , parece que sys.exit()es la forma correcta de terminar un script antes de tiempo.

La documentación de Python señala que sys.exit():

se implementa elevando la excepción SystemExit, por lo que se respetan las acciones de limpieza especificadas por las cláusulas finalmente de las declaraciones try, y es posible interceptar el intento de salida a un nivel externo.

La manera fácil de lidiar con esto es envolver su script en un controlador de excepciones:

import sys
import arcpy

try:
    #do stuff
    sys.exit(0)
except SystemExit:
    pass

Sin embargo, esto no es particularmente elegante y requiere una reestructuración de todo su proyecto, sin mencionar otro nivel de sangría. Además, en la situación poco probable de que otra parte de su código genere una SystemExitexcepción que nunca sabría al respecto ... Otra solución poco elegante pero quizás preferible es ajustar las llamadas a sys.exit () en otra función:

import sys
import arcpy

def finish(arg=None):
    try:
        sys.exit(arg)
    except SystemExit:
        pass

#do stuff
finish()

Ahora puede llamar finish(), finish(1)o finish('Error message')tal como espera poder llamar a sys.exit ().

Por supuesto, podríamos querer usar nuestro enfoque de alimentación de excepción en otras circunstancias, y debido a que es Python, podemos generalizar y hacer un decorador útil y multipropósito:

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()
fmark
fuente