ArcMap में स्वयंभू पायथन लिपि?


17

मैंने कोशिश की है sys.exit, लेकिन यह आर्केप 10 में काम नहीं करता है।

कोई जानता है कि इसे कैसे करना है?

जवाबों:


16

से ArcPy उदाहरण , ऐसा लगता है जैसे sys.exit()जल्दी एक स्क्रिप्ट को समाप्त करने का सही तरीका है।

अजगर प्रलेखन नोटों कि sys.exit():

SystemExit अपवाद को बढ़ाकर कार्यान्वित किया जाता है, इसलिए अंत में प्रयास विवरणों के खंड द्वारा निर्दिष्ट क्लीनअप क्रियाओं को सम्मानित किया जाता है, और बाहरी स्तर पर निकास प्रयास को रोकना संभव है।

इससे निपटने का आसान तरीका आपकी स्क्रिप्ट को अपवाद हैंडलर में लपेटना है:

import sys
import arcpy

try:
    #do stuff
    sys.exit(0)
except SystemExit:
    pass

हालांकि, यह विशेष रूप से सुरुचिपूर्ण नहीं है और आपके पूरे प्रोजेक्ट के पुनर्गठन की आवश्यकता है, न कि अन्य स्तर के इंडेंटेशन का उल्लेख करने के लिए। इसके अलावा, इस स्थिति में कि आपके कोड का एक अन्य हिस्सा एक SystemExitअपवाद को उठाता है, जिसके बारे में आप कभी नहीं जान पाएंगे ... एक और असंगत लेकिन शायद बेहतर समाधान एक और फ़ंक्शन में sys.exit () को कॉल लपेटना है:

import sys
import arcpy

def finish(arg=None):
    try:
        sys.exit(arg)
    except SystemExit:
        pass

#do stuff
finish()

अब आप कॉल कर सकते हैं finish(), finish(1)या finish('Error message')जैसे आप उम्मीद कर सकते हैं कि आप sys.exit () कॉल कर पाएंगे।

बेशक, हम अन्य परिस्थितियों में अपने अपवाद खाने के दृष्टिकोण का उपयोग करना चाहते हैं, और क्योंकि यह पायथन है, हम एक उपयोगी, बहुउद्देशीय डेकोरेटर को सामान्य कर सकते हैं और बना सकते हैं:

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()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.