2013-08-22 6 views
8

मैं पाइथन सीख रहा हूं और एक अवधारणा पर ठोकर खा रहा हूं जिसे मैं आसानी से पच नहीं सकता: वैकल्पिक elsetry निर्माण के भीतर ब्लॉक।पायथन में निर्माण/छोड़ने के प्रयास में और क्यों उपयोग करें?

the documentation के अनुसार:

कोशिश ... बयान को छोड़कर एक वैकल्पिक बाकी खंड है, जो है, जब वर्तमान, सभी खंड को छोड़कर का पालन करना होगा है। यह कोड के लिए उपयोगी है कि निष्पादित किया जाना चाहिए यदि प्रयास खंड अपवाद नहीं उठाता है।

क्या मैं के बारे में है क्यों कोड है कि अगर कोशिश खंड कोशिश निर्माण के भीतर एक अपवाद उठाना नहीं है निष्पादित किया जाना चाहिए उलझन में हूँ - क्यों नहीं बस यह कोशिश/एक ही पर छोड़कर पालन करें इंडेंटेशन स्तर? मुझे लगता है कि यह अपवाद हैंडलिंग के विकल्पों को सरल बना देगा। या पूछने का एक और तरीका यह होगा कि else ब्लॉक में जो कोड है, वह ऐसा नहीं करेगा यदि यह केवल कोशिश कथन का पालन कर रहा हो, तो इससे स्वतंत्र। शायद मुझे कुछ याद आ रहा है, मुझे प्रबुद्ध करो।

यह प्रश्न कुछ हद तक this one जैसा है लेकिन मैं वहां जो खोज रहा हूं उसे नहीं मिला।

उत्तर

11

else ब्लॉक केवल तभी निष्पादित किया जाता है जब try में कोड अपवाद नहीं उठाता है; यदि आप else ब्लॉक के बाहर कोड डालते हैं, तो यह अपवादों के बावजूद होगा। साथ ही, यह finally से पहले होता है, जो आम तौर पर महत्वपूर्ण होता है।

यह आमतौर पर तब उपयोगी होता है जब आपके पास एक संक्षिप्त सेटअप या सत्यापन अनुभाग होता है जो त्रुटि हो सकता है, जिसके बाद आप उस संसाधन का उपयोग करते हैं जहां आप सेट अप संसाधनों का उपयोग करते हैं जिसमें आप त्रुटियों को छिपाना नहीं चाहते हैं। आप कोड को में नहीं डाल सकते हैं क्योंकि त्रुटियां except क्लॉज पर जा सकती हैं जब आप उन्हें प्रचार करना चाहते हैं। आप इसे निर्माण के बाहर नहीं रख सकते हैं, क्योंकि संसाधन निश्चित रूप से उपलब्ध नहीं हैं, या तो सेटअप विफल हुआ है या क्योंकि finally सब कुछ नीचे फेंक दिया गया है। इस प्रकार, आपके पास else ब्लॉक है।

+0

आह, ठीक है ... बनाता है सही समझ। तो फिर इसे कोशिश खंड के अंत में क्यों न डालें? क्या यह संभावना है कि वह कोड अपवाद फेंक रहा है और आप अपवाद मूल के दायरे को सीमित करना चाहते हैं? – amphibient

+2

यूप। इसे अन्य भाषाओं में 'प्रयास' में डालने का सामान्य अभ्यास है, खासकर यदि कोई 'छोड़कर' ब्लॉक नहीं है, लेकिन पायथन में, हमारे पास 'else' है, इसलिए हम इसका उपयोग करते हैं। – user2357112

+0

उत्कृष्ट स्पष्टीकरण, धन्यवाद – amphibient

4

उपयोगकर्ताओं का उपयोग फ्लैग वैरिएबल को परिभाषित करने से रोकने के लिए किया जा सकता है ताकि यह जांच सके कि कोई अपवाद उठाया गया है या नहीं (जैसा कि हम for-else लूप में करते हैं)।

एक साधारण उदाहरण:

lis = range(100) 
ind = 50 
try: 
    lis[ind] 
except: 
    pass 
else: 
    #Run this statement only if the exception was not raised 
    print "The index was okay:",ind 

ind = 101 

try: 
    lis[ind] 
except: 
    pass 
print "The index was okay:",ind # this gets executes regardless of the exception 

# This one is similar to the first example, but a `flag` variable 
# is required to check whether the exception was raised or not. 

ind = 10 
try: 
    print lis[ind] 
    flag = True 
except: 
    pass 

if flag: 
    print "The index was okay:",ind 

आउटपुट:

The index was okay: 50 
The index was okay: 101 
The index was okay: 10 
संबंधित मुद्दे