Eu tenho um script de ferramenta arcpy para ArcGIS 10.0 que possui duas seções funcionais principais. O usuário pode optar por executar ou não a segunda seção. Se o usuário optar por NÃO executar a segunda seção, simplesmente desejo executar uma função de limpeza e sair do script com um sys.exit (0) sem ter uma mensagem de erro postada na janela de resultados da ferramenta. Existem dois tópicos principais aqui no GIS-SE sobre a saída de scripts arcpy, mas as soluções contidas nele não tratam especificamente da mensagem de erro. A estrutura geral do código é a seguinte:
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()
Se eu executar esse código no interpretador Python fora do ArcGIS / arcpy, ele funcionará como seria de esperar, saindo normalmente sem nenhuma mensagem de erro; no entanto, no meu script arcpy com essa mesma estrutura, o script é encerrado, mas uma mensagem de erro SystemExit é postada na janela de resultados da ferramenta. Existe uma maneira de fazer com que o script da ferramenta arcpy coma a exceção e oculte a mensagem de erro SystemExit?
fonte
Respostas:
Resposta curta: corrigida em 10.1. Por enquanto, você precisará adicionar um nível extra de recuo. Isso pode incentivar algumas refatorações úteis ao seu código. Sempre que você obtiver um grande número de linhas em um único script / rotina, pense em dividi-lo em seções menores (funções, classes) de qualquer maneira.
fonte
O ArcPy mexe com o seu ambiente Python . Em resumo, não execute sys.exit () ou localize / chame a função "cleanup-before-exit" (se houver) da arcpy antes de chamar sys.exit ().
fonte
sys.exit()
é uma espécie de truque sujo - chamarexit
gera umaSystemExit
exceção e o intérprete de nível superior, que normalmente imprime um retorno, detectará o tipo de exceção e encerrará o intérprete. A incorporação de um intérprete Python em outro aplicativo, como a família de executáveis ArcGIS, requer uma quantidade não trivial de código específico da implementação, como este.Não sei como enterrar a mensagem de erro SystemExit, mas você sempre pode reestruturar seu código para evitar chamar sys.exit
fonte