Esci dallo script con Python


11

Ho uno script Python per ArcGIS su cui sto lavorando e mi piacerebbe avere la possibilità di chiudere lo script se non disponesse dei dati necessari. Ho provato un semplice sys.exit () ma ciò darebbe un'eccezione in ArcMap che vorrei evitare. Ho trovato questo thread che suggerisce l'utilizzo di un blocco try, quindi ho creato questa funzione:

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

Sfortunatamente, neanche quello ha funzionato. Bene, non fa più quell'errore su ArcMap, ma non si chiude. In questo momento, ho la maggior parte del mio codice in un'istruzione if / else, ma è brutto. Qualcuno ha altri suggerimenti?

Grazie! Brian


In teoria sys.exit (0) è un'operazione completata con esito positivo - vedi msdn.microsoft.com/en-us/library/ms681381.aspx - ma come Michael non sono vicino ad ArcGIS, quindi non saprei dirti come è maneggiato.
om_henners,

Hai provato a sollevare systemexit? Ho un programma Python che ho scritto dove uso questo approccio in un'istruzione if cercando di ottenere un elenco delle funzionalità in un'area di lavoro, e se restituisce un elenco vuoto le altre chiamate aumentano systemexit (funziona benissimo - Ho un sacco di anche l'output del file di registro e la stampa continuano in modo da poter capire perché il programma è uscito). Probabilmente diversi modi per farlo e forse anche modi migliori, ma questo fa quello che mi aspettavo / volevo che facesse.
turkishgold

4
Hai visto gli esempi in questo thread GSE gis.stackexchange.com/questions/1015/…

Risposte:


2

No, il blocco try / tranne che desideri avrà il "catch" per ottenere la tua chiamata di uscita; quindi nel tuo tentativo faresti qualcosa del genere:

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

Questo verrà archiviato se l'istruzione 'if' non riesce.


Ho pensato, tranne che funziona solo quando c'è un errore da rilevare?
Chris Stayte,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.