Yanıtlar:
Gönderen ArcPy örnekler gibi görünüyor sys.exit()
erken bir senaryo sonlandırmak için doğru yoldur.
Python belgelerine notlar olduğunu sys.exit()
:
SystemExit istisnasını yükselterek uygulanır, bu nedenle nihayet try ifadeleri cümleleriyle belirtilen temizleme eylemleri yerine getirilir ve çıkış denemesini dış düzeyde durdurmak mümkündür.
Bununla başa çıkmanın kolay yolu, komut dosyanızı bir istisna işleyicisine sarmaktır:
import sys
import arcpy
try:
#do stuff
sys.exit(0)
except SystemExit:
pass
Bununla birlikte, bu özellikle zarif değildir ve başka bir girinti seviyesinden bahsetmemek için tüm projenizin yeniden yapılandırılmasını gerektirir. Ayrıca, kodunuzun başka bir bölümünün SystemExit
bunun hakkında asla bilemeyeceğiniz bir istisna oluşturması olası olmayan bir durumda ... Başka bir yetersiz ama belki de tercih edilen bir çözüm, sys.exit () çağrılarını başka bir işlevde sarmaktır:
import sys
import arcpy
def finish(arg=None):
try:
sys.exit(arg)
except SystemExit:
pass
#do stuff
finish()
Şimdi diyebilirsiniz finish()
, finish(1)
ya da finish('Error message')
sen sys.exit arama yapabilmek için beklemek gibi ().
Tabii ki, istisna yeme yaklaşımımızı diğer durumlarda kullanmak isteyebiliriz ve bu Python olduğundan, genelleştirebilir ve çok amaçlı bir dekoratör yapabiliriz:
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()