Beenden Sie das Skript mit Python

11

Ich habe ein Python-Skript für ArcGIS, an dem ich arbeite, und ich möchte die Möglichkeit haben, das Skript zu beenden, wenn nicht die erforderlichen Daten verfügbar sind. Ich habe versucht, sys.exit () direkt nach oben zu bringen, aber das würde eine Ausnahme in ArcMap ergeben, die ich vermeiden möchte. Ich habe diesen Thread gefunden , der die Verwendung eines try-Blocks vorschlägt, also habe ich diese Funktion erstellt:

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

Das hat leider auch nicht funktioniert. Nun, es macht diesen Fehler in ArcMap nicht mehr, aber es wird auch nicht beendet. Im Moment habe ich den Großteil meines Codes in einer if / else-Anweisung, aber das ist hässlich. Hat jemand andere Vorschläge?

Vielen Dank! Brian

Brian Buell
quelle
Theoretisch ist sys.exit (0) eine Operation, die erfolgreich beendet wurde - siehe msdn.microsoft.com/en-us/library/ms681381.aspx - aber wie Michael bin ich nicht in der Nähe von ArcGIS, daher konnte ich Ihnen nicht sagen, wie es ist abgewickelt.
om_henners
Haben Sie versucht, systemexit zu erhöhen? Ich habe ein Python-Programm geschrieben, in dem ich diesen Ansatz in einer if-Anweisung verwende, indem ich versuche, eine Liste der Funktionen in einem Arbeitsbereich abzurufen. Wenn eine leere Liste zurückgegeben wird, lösen die else-Aufrufe systemexit aus (funktioniert hervorragend - ich habe viele Die Ausgabe und der Druck der Protokolldatei werden ebenfalls ausgeführt, damit ich feststellen kann, warum das Programm beendet wurde. Wahrscheinlich mehrere Möglichkeiten, dies zu tun und vielleicht sogar noch bessere, aber diese macht das, was ich erwartet / wollte.
türkischgold
4
Haben Sie die Beispiele in diesem GSE-Thread gesehen

Antworten:

2

Nein, der Try / Except-Block, den Sie möchten, hat den 'catch', der Ihren Exit-Anruf erhält. Bei Ihrem Versuch würden Sie also Folgendes tun:

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

Dies wird abgelegt, wenn Ihre 'if'-Anweisung fehlschlägt.

DEWright
quelle
Ich dachte, außer läuft nur, wenn es einen Fehler zu fangen gibt?
Chris Stayte