जवाबों:
से 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()