Salir del script con Python

11

Tengo un script de Python para ArcGIS en el que estoy trabajando, y me gustaría tener la capacidad de cerrar el script si no tiene los datos necesarios disponibles. Probé un sys.exit () directo, pero eso daría una excepción en ArcMap que me gustaría evitar. Encontré este hilo que sugiere usar un bloque try, así que hice esta función:

def quit_script(message):
log_msg(message) # already defined; writes a message to a file
if log_loc:
    output.close() # close the file used with log_msg()
try:
    sys.exit()
except SystemExit:
    pass

Desafortunadamente, eso tampoco funcionó. Bueno, ya no comete ese error en ArcMap, pero tampoco lo hace, bueno, se cierra. En este momento, tengo la mayor parte de mi código en una declaración if / else, pero eso es feo. Alguien tiene alguna otra sugerencia?

¡Gracias! Brian

Brian Buell
fuente
En teoría, sys.exit (0) es una operación completada con éxito salir - ver msdn.microsoft.com/en-us/library/ms681381.aspx - pero como Michael no estoy cerca de ArcGIS, así que no podría decirte cómo es manejado.
om_henners
¿Has probado elevar systemexit? Tengo un programa de Python que escribí donde uso este enfoque en una declaración if al tratar de obtener una lista de las características en un espacio de trabajo, y si devuelve una lista vacía, el else llama a raise systemexit (funciona muy bien, tengo muchos la salida del archivo de registro y la impresión también continúan, por lo que puedo decir por qué salió el programa). Probablemente múltiples formas de hacer esto y quizás formas aún mejores, pero esta hace lo que esperaba / quería que hiciera.
turkishgold
44
¿ Viste

Respuestas:

2

No, el bloque try / except que querrás tiene el 'catch' para obtener tu llamada de salida; así que en tu intento harías algo como esto:

try:
    if arcpy.Exists(parcelOutput):
    arcpy.AddMessage("Calculating Parcel Numbers")    
except:
    raise sys.exit("Error: " + arcpy.GetMessages(x))

Esto se archivará si su declaración 'if' falla.

DEWright
fuente
Pensé, excepto que solo se ejecuta cuando hay un error que atrapar.
Chris Stayte