Sair do script com Python


11

Eu tenho um script Python para o ArcGIS no qual estou trabalhando e gostaria de ter a capacidade de encerrar o script se ele não tiver os dados necessários disponíveis. Tentei um sys.exit () direto, mas isso daria uma exceção no ArcMap que eu gostaria de evitar. Eu encontrei este segmento que sugere o uso de um bloco try, então eu fiz esta função:

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

Infelizmente, isso também não funcionou. Bem, ele não comete mais esse erro no ArcMap, mas também não sai. No momento, tenho a maior parte do meu código em uma instrução if / else, mas isso é feio. Alguém tem outras sugestões?

Obrigado! Brian


Em teoria, sys.exit (0) é uma operação concluída com êxito - consulte msdn.microsoft.com/en-us/library/ms681381.aspx - mas, como Michael, não estou perto do ArcGIS, portanto não sabia como manuseado.
Om_henners

Você já tentou aumentar systemexit? Eu tenho um programa python que escrevi onde utilizo essa abordagem em uma instrução if tentando obter uma lista dos recursos em um espaço de trabalho e, se ele retorna uma lista vazia, as outras chamadas chamam raise systemexit (funciona muito bem - eu tenho muitas saída do arquivo de log e impressão acontecendo também para que eu saiba por que o programa foi encerrado). Provavelmente várias maneiras de fazer isso e talvez até melhores, mas essa faz o que eu esperava / queria.
turkishgold

4
Você viu os exemplos neste tópico do GSE gis.stackexchange.com/questions/1015/…

Respostas:


2

Não, o bloco try / except que você deseja terá o 'catch' para receber sua chamada de saída; portanto, em sua tentativa, você faria algo assim:

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

Isso será arquivado se a instrução 'if' falhar.


Eu pensei, exceto é executado apenas quando há um erro para pegar?
Chris Stayte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.