Quitter le script avec Python

11

J'ai un script Python pour ArcGIS sur lequel je travaille, et j'aimerais pouvoir quitter le script s'il ne dispose pas des données nécessaires. J'ai essayé directement sys.exit () mais cela donnerait une exception dans ArcMap que j'aimerais éviter. J'ai trouvé ce fil qui suggère d'utiliser un bloc try, j'ai donc fait cette fonction:

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

Malheureusement, cela n'a pas fonctionné non plus. Eh bien, cela ne fait plus cette erreur sur ArcMap, mais il ne s'arrête pas non plus. En ce moment, j'ai la majeure partie de mon code dans une instruction if / else, mais c'est moche. Quelqu'un a d'autres suggestions?

Merci! Brian

Brian Buell
la source
En théorie, sys.exit (0) est une opération terminée avec succès - voir msdn.microsoft.com/en-us/library/ms681381.aspx - mais comme Michael je ne suis pas près d'ArcGIS donc je ne peux pas vous dire comment c'est manipulé.
om_henners
Avez-vous essayé d'augmenter Systemexit? J'ai un programme python que j'ai écrit où j'utilise cette approche dans une instruction if en essayant d'obtenir une liste des fonctionnalités dans un espace de travail, et s'il renvoie une liste vide, les appels else déclenchent systemexit (fonctionne très bien - j'ai beaucoup de la sortie du fichier journal et l'impression se poursuivent également pour que je puisse savoir pourquoi le programme s'est arrêté) Probablement plusieurs façons de le faire et peut-être même de meilleures façons, mais celui-ci fait ce que j'attendais / voulais qu'il fasse.
turkishgold
4
Avez-vous vu les exemples dans ce thread GSE gis.stackexchange.com/questions/1015/…

Réponses:

2

Non, le bloc try / except que vous voudrez avoir le «catch» reçoit votre appel de sortie; donc dans votre essai, vous feriez quelque chose comme ceci:

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

Ce fichier sera déposé si votre instruction «if» échoue.

DEWright
la source
Je pensais que sauf ne fonctionne que lorsqu'il y a une erreur à attraper?
Chris Stayte