13 votos

¿Cómo usar sys.exit(0) en un script de arcpy para salir temprano sin tener un mensaje de error aparece?

Tengo una arcpy herramienta de secuencia de comandos para ArcGIS 10.0, que tiene dos grandes secciones funcionales. El usuario puede elegir si desea o no para ejecutar la segunda sección. Si el usuario decide NO ejecutar la segunda sección, simplemente quiero ejecutar una función de limpieza y de salida de la secuencia de comandos con un sys.exit(0) sin tener un mensaje de error enviado a los resultados de la herramienta de la ventana. Hay dos principales hilos aquí en el SIG, SE acerca salir de arcpy scripts, pero las soluciones que en el mismo no abordan específicamente el mensaje de error. La estructura general del código es el siguiente:

import sys
##import arcpy

def CleanUp():
    print 'Cleaning up ...\n'

def finish():
    CleanUp()
    print 'Exiting ...'
    sys.exit(0)

do_more = False  #or True ... input from user

#Section 1:  do some stuff
print 'Doing some stuff ...\n'

if not do_more:
    finish()

#Section 2:  do more stuff
print 'doing more stuff ...'
CleanUp()

Si ejecuto este código en el intérprete de Python fuera de ArcGIS/arcpy, funciona como se esperaba, la salida de la gracia con ningún mensaje de error; sin embargo, en mi arcpy secuencia de comandos con esta misma estructura, la secuencia de comandos de salidas, pero un SystemExit mensaje de error se registra en los resultados de la herramienta de la ventana. Es allí una manera de hacer el arcpy herramienta de secuencia de comandos de comer la excepción y enterrar a los SystemExit mensaje de error?

8voto

Paul Puntos 555

Respuesta corta: solucionado en 10.1. Por ahora, vas a tener que añadir un nivel adicional de sangría. Esto podría animar a algunos refactorización útil a su código de sin embargo. Cada vez que se un gran número de líneas en una sola secuencia de comandos/rutina, usted querrá pensar en cortar para arriba en secciones más pequeñas (funciones, clases) de todos modos.

def main():
    <your code>

if __name__ == "__main__":
    try:
        main()
    except SystemExit as err:
        pass

3voto

csmba Puntos 2440

ArcPy líos con su entorno Python. En definitiva, no hacer sys.exit() o encontrar/llamada "limpieza-antes de-salida" de arcpy (si existe) la función antes de llamar al sys.exit().

2voto

Lucas Puntos 128

No sé cómo a 'enterrar' el mensaje de error SystemExit, pero siempre podría reestructurar el código para evitar llamar a sys.exit

import sys
##import arcpy

def DoMoreStuff():
    print 'doing more stuff ...'

def CleanUp():
    print 'Cleaning up ...'

def finish():
    CleanUp()
    print 'Exiting ...'

do_more = False  #or True ... input from user

#Section 1:  do some stuff
print 'Doing some stuff ...'

if do_more:DoMoreStuff()

finish()

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X