मॉड्यूल पाठ (4/4)
त्रुटि प्रबंधन: प्रयास करें/छोड़ें
जब रनटाइम पर कुछ गलत हो जाता है (शून्य से विभाजन, एक गुम कुंजी, आदि
असंगत प्रकारों पर ऑपरेशन) पायथन एक अपवाद उठाता है। बिना
हैंडलिंग, अपवाद प्रोग्राम को बाधित करता है। try / except के साथ आप
इसे पकड़ सकते हैं और निर्णय ले सकते हैं कि क्या करना है।
मूल स्वरूप
try:
risultato = 10 / 0
except ZeroDivisionError:
risultato = None
risultato # Nonetry:ब्लॉक में वह कोड है जो विफल हो सकता है;except <ErrorType>:तभी निष्पादित होता है जब वह त्रुटि प्रकार उठाया जाता हैtryके अंदर।
अपवाद संदेश को पकड़ना
अपवाद ऑब्जेक्ट को किसी नाम से बांधने के लिए as का उपयोग करें:
try:
int("non è un numero")
except ValueError as e:
messaggio = str(e)
messaggio # "invalid literal for int() with base 10: 'non è un numero'"एक साथ अनेक प्रकार
try:
valore = dati[chiave]
except (KeyError, IndexError):
valore = Noneप्रकारों का एक टुपल उन प्रकारों (या उपवर्गों) के किसी भी अपवाद को पकड़ता है।
पूर्ण संरचना: प्रयास करें/छोड़ें/अन्यथा/अंततः
try:
n = int("42")
except ValueError:
print("not a number")
else:
print(f"parsed: {n}") # executed only if NO exception occurred
finally:
print("always executed") # executed regardless, even on exceptionelse- इसका उपयोग उस कोड के लिए करें जोtryकी सफलता पर निर्भर करता है। इसे रखो अलग करें ताकि आप गलती से असंबद्ध अपवादों को न पकड़ें।finally- सफाई जो हमेशा होनी चाहिए (फ़ाइल को बंद करना, जारी करना) संसाधन)। सफलता और त्रुटि दोनों पर क्रियान्वित।
एक अपवाद उठाना: raise
कभी-कभी आप ही यह संकेत देना चाहते हैं कि कुछ गलत हो गया है:
def diviso(a, b):
if b == 0:
raise ValueError("the divisor cannot be zero")
return a / bसबसे आम अंतर्निहित अपवाद जिनका आप सामना करेंगे और उठाएंगे:
ValueError- मान का प्रकार सही है लेकिन अस्वीकार्य है (उदाहरण के लिए पार्सिंग)।TypeError- प्रकार ग़लत है (उदा.len(42))।KeyError/IndexError— गुम कुंजी/सूचकांक।ZeroDivisionError— शून्य से विभाजन।FileNotFoundError,PermissionError— फ़ाइल सिस्टम संचालन।
प्रयास ब्लॉक में अन्य और अंत में खंड
एक try ब्लॉक दो अतिरिक्त खंड परिभाषित कर सकता है:
else: केवल तभी निष्पादित किया जाता है जबtryब्लॉक बिना कोई अपवाद उठाए पूरा हो जाता है।finally: हमेशा निष्पादित किया जाता है, चाहे कोई अपवाद हुआ हो। यह संसाधनों को साफ़ करने के लिए आदर्श है (जैसे किसी खुली फ़ाइल या डेटाबेस कनेक्शन को बंद करना)।
खुद कोशिश करना
एक अभिव्यक्ति लिखें जो int('abc') को आज़माती है: यदि वैल्यूएरर उठाया गया है, तो स्ट्रिंग 'errore' को `result` पर असाइन करें; अन्यथा नंबर असाइन करें. 'परिणाम' का मूल्यांकन करें.
संकेत दिखाएँ
int('abc') वैल्यूएरर बढ़ाता है।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
`डिवाइड(ए, बी)` को परिभाषित करें जो ए/बी लौटाता है लेकिन यदि बी 0 है तो संदेश 'डिविसोर ज़ीरो' के साथ वैल्यूएरर बढ़ाता है। फिर ट्राई/एक्सेप्ट के अंदर डिवाइड(10, 0) को कॉल करें और पकड़े गए अपवाद की स्ट्रिंग को `मैसेज` में असाइन करें।
संकेत दिखाएँ
फ़ंक्शन के अंदर वैल्यूएरर('...') बढ़ाएं; वैल्यू एरर को छोड़कर ई के रूप में पकड़ें।
3 प्रयासों के बाद समाधान उपलब्ध है
अतिरिक्त चुनौती
स्ट्रिंग \`text_val = "abc"\` को एक पूर्णांक में बदलने के लिए एक \`try-except\` ब्लॉक लिखें। यदि रूपांतरण से \`ValueError\` बढ़ता है, तो \`परिणाम\` को \`कोई नहीं\` निर्दिष्ट करें। अन्यथा, परिवर्तित नंबर असाइन करें. अंत में, \`परिणाम\` का मूल्यांकन करें।
संकेत दिखाएँ
प्रयास करें: परिणाम = int(text_val) का उपयोग करें और उसके बाद वैल्यूएरर को छोड़कर: परिणाम = कोई नहीं।
3 प्रयासों के बाद समाधान उपलब्ध है