ArcMap'ta kendi kendine sonlanan Python betiği?


17

Denedim sys.exit, ancak ArcMap 10'da çalışmıyor gibi görünüyor.

Nasıl yapıldığını bilen var mı?

Yanıtlar:


16

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 SystemExitbunun 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()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.