Antworten:
In ArcPy-Beispielen scheint sys.exit()
es der richtige Weg zu sein, ein Skript vorzeitig zu beenden.
In der Python-Dokumentation wird Folgendes angegeben sys.exit()
:
wird durch Auslösen der SystemExit-Ausnahme implementiert, sodass die in finally-Klauseln von try-Anweisungen angegebenen Bereinigungsaktionen berücksichtigt werden und der Beendigungsversuch auf einer äußeren Ebene abgefangen werden kann.
Die einfache Möglichkeit, dies zu bewältigen, besteht darin, Ihr Skript in einen Ausnahmehandler einzubinden:
import sys
import arcpy
try:
#do stuff
sys.exit(0)
except SystemExit:
pass
Dies ist jedoch nicht besonders elegant und erfordert eine Umstrukturierung Ihres gesamten Projekts sowie eine weitere Einrückungsebene. In dem unwahrscheinlichen Fall, dass ein anderer Teil Ihres Codes eine SystemExit
Ausnahme auslöst, würden Sie nie darüber Bescheid wissen.
import sys
import arcpy
def finish(arg=None):
try:
sys.exit(arg)
except SystemExit:
pass
#do stuff
finish()
Jetzt können Sie anrufen finish()
, finish(1)
oder finish('Error message')
wie Sie erwarten zu können , sys.exit () aufzurufen.
Natürlich möchten wir unseren Essansatz für Ausnahmen unter anderen Umständen verwenden, und da dies Python ist, können wir einen nützlichen Mehrzweckdekorateur verallgemeinern und erstellen:
import sys
import arcpy
def eat_exception(fn, exception):
def safe(*v, **k):
try:
fn(*v, **k)
except exception:
pass
return safe
finish = eat_exception(sys.exit, SystemExit)
#do stuff
finish()