Script Python com terminação automática no ArcMap?

17

Eu tentei sys.exit, mas parece não funcionar no ArcMap 10.

Alguém sabe como fazer?

Curtidor
fonte

Respostas:

16

De exemplos ArcPy , parece que sys.exit()é a maneira correta de encerrar um script cedo.

A documentação do Python observa que sys.exit():

é implementado levantando a exceção SystemExit, para que as ações de limpeza especificadas por finalmente cláusulas das instruções try sejam respeitadas e é possível interceptar a tentativa de saída em um nível externo.

A maneira mais fácil de lidar com isso é agrupar seu script em um manipulador de exceções:

import sys
import arcpy

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

No entanto, isso não é particularmente elegante e requer uma reestruturação de todo o seu projeto, sem mencionar outro nível de indentação. Além disso, na improvável situação em que outra parte do seu código gera uma SystemExitexceção, você nunca saberia sobre isso ... Outra solução deselegante, mas talvez preferível, é agrupar chamadas para sys.exit () em outra função:

import sys
import arcpy

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

#do stuff
finish()

Agora você pode chamar finish(), finish(1)ou finish('Error message')apenas como você espera ser capaz de chamar sys.exit ().

Obviamente, podemos querer usar nossa abordagem de exceção de comer em outras circunstâncias, e como esse é o Python, podemos generalizar e criar um decorador útil e polivalente:

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
fonte