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

Brian Buell
fonte
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.

DEWright
fonte
Eu pensei, exceto é executado apenas quando há um erro para pegar?
Chris Stayte