Respuestas:
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 SystemExit
excepció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()