मुख्य सामग्री पर जाएं
मॉड्यूल 2 · पाठ 4 का 4पाठ्यक्रम में 8/36~12 min
मॉड्यूल पाठ (4/4)

त्रुटि प्रबंधन: प्रयास करें/छोड़ें

जब रनटाइम पर कुछ गलत हो जाता है (शून्य से विभाजन, एक गुम कुंजी, आदि असंगत प्रकारों पर ऑपरेशन) पायथन एक अपवाद उठाता है। बिना हैंडलिंग, अपवाद प्रोग्राम को बाधित करता है। try / except के साथ आप इसे पकड़ सकते हैं और निर्णय ले सकते हैं कि क्या करना है।

मूल स्वरूप

Python
try:
    risultato = 10 / 0
except ZeroDivisionError:
    risultato = None
risultato  # None
  • try: ब्लॉक में वह कोड है जो विफल हो सकता है;
  • except <ErrorType>: तभी निष्पादित होता है जब वह त्रुटि प्रकार उठाया जाता है try के अंदर।

अपवाद संदेश को पकड़ना

अपवाद ऑब्जेक्ट को किसी नाम से बांधने के लिए as का उपयोग करें:

Python
try:
    int("non è un numero")
except ValueError as e:
    messaggio = str(e)
messaggio  # "invalid literal for int() with base 10: 'non è un numero'"

एक साथ अनेक प्रकार

Python
try:
    valore = dati[chiave]
except (KeyError, IndexError):
    valore = None

प्रकारों का एक टुपल उन प्रकारों (या उपवर्गों) के किसी भी अपवाद को पकड़ता है।

पूर्ण संरचना: प्रयास करें/छोड़ें/अन्यथा/अंततः

Python
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 exception
  • else - इसका उपयोग उस कोड के लिए करें जो try की सफलता पर निर्भर करता है। इसे रखो अलग करें ताकि आप गलती से असंबद्ध अपवादों को न पकड़ें।
  • finally - सफाई जो हमेशा होनी चाहिए (फ़ाइल को बंद करना, जारी करना) संसाधन)। सफलता और त्रुटि दोनों पर क्रियान्वित।

एक अपवाद उठाना: raise

कभी-कभी आप ही यह संकेत देना चाहते हैं कि कुछ गलत हो गया है:

Python
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: हमेशा निष्पादित किया जाता है, चाहे कोई अपवाद हुआ हो। यह संसाधनों को साफ़ करने के लिए आदर्श है (जैसे किसी खुली फ़ाइल या डेटाबेस कनेक्शन को बंद करना)।

खुद कोशिश करना

व्यायाम#python.m2.l4.e1
प्रयास: 0लोड हो रहा है...

एक अभिव्यक्ति लिखें जो int('abc') को आज़माती है: यदि वैल्यूएरर उठाया गया है, तो स्ट्रिंग 'errore' को `result` पर असाइन करें; अन्यथा नंबर असाइन करें. 'परिणाम' का मूल्यांकन करें.

संपादक लोड हो रहा है...
संकेत दिखाएँ

int('abc') वैल्यूएरर बढ़ाता है।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम की समीक्षा करें

व्यायाम#python.m2.l4.e2
प्रयास: 0लोड हो रहा है...

`डिवाइड(ए, बी)` को परिभाषित करें जो ए/बी लौटाता है लेकिन यदि बी 0 है तो संदेश 'डिविसोर ज़ीरो' के साथ वैल्यूएरर बढ़ाता है। फिर ट्राई/एक्सेप्ट के अंदर डिवाइड(10, 0) को कॉल करें और पकड़े गए अपवाद की स्ट्रिंग को `मैसेज` में असाइन करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

फ़ंक्शन के अंदर वैल्यूएरर('...') बढ़ाएं; वैल्यू एरर को छोड़कर ई के रूप में पकड़ें।

3 प्रयासों के बाद समाधान उपलब्ध है

अतिरिक्त चुनौती

व्यायाम#python.m2.l4.e3
प्रयास: 0लोड हो रहा है...

स्ट्रिंग \`text_val = "abc"\` को एक पूर्णांक में बदलने के लिए एक \`try-except\` ब्लॉक लिखें। यदि रूपांतरण से \`ValueError\` बढ़ता है, तो \`परिणाम\` को \`कोई नहीं\` निर्दिष्ट करें। अन्यथा, परिवर्तित नंबर असाइन करें. अंत में, \`परिणाम\` का मूल्यांकन करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

प्रयास करें: परिणाम = int(text_val) का उपयोग करें और उसके बाद वैल्यूएरर को छोड़कर: परिणाम = कोई नहीं।

3 प्रयासों के बाद समाधान उपलब्ध है