Kodokon kodokon.com

त्रुटियाँ और अपवाद: try, except, raise

try/except/else/finally से पूर्वानुमेय विफलताओं को पकड़ें और अमान्य डेटा का संकेत देने के लिए अपने खुद के अपवाद उठाएँ।

9 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

एक वास्तविक प्रोग्राम विफल होता है: गायब फ़ाइल, अमान्य इनपुट, टूटा हुआ नेटवर्क। Python इन स्थितियों का संकेत अपवाद से देता है, जो निष्पादन बाधित करते हैं और कॉल स्टैक में ऊपर की ओर तब तक फैलते हैं जब तक कोई try/except उन्हें पकड़ न ले। पेशेवर प्रतिवर्त: जितना संभव हो उतना विशिष्ट अपवाद पकड़ें, उस जगह के जितना संभव हो उतना पास जहाँ आप जानते हैं कि क्या करना है।

PYTHON
def parse_age(text):
    try:
        return int(text)
    except ValueError:
        return None

print(parse_age("34"))      # 34
print(parse_age("thirty"))  # None
हम ठीक-ठीक ValueError पकड़ते हैं, हर त्रुटि नहीं।

पूरे ब्लॉक की चार शाखाएँ होती हैं। try में जोखिम वाला कोड होता है, except विफलता को संभालता है, else केवल तभी चलता है जब कोई अपवाद न उठा हो, और finally हर स्थिति में चलता है - किसी संसाधन को मुक्त करने या लॉग करने के लिए आदर्श। else का मतलब यही है: try को न्यूनतम रखें, ताकि आप एक नज़र में देख सकें कि कौन सी लाइन विफल हो सकती है।

PYTHON
values = ["10", "abc", "25"]
total = 0

for value in values:
    try:
        number = int(value)
    except ValueError:
        print(f"Skip : {value}")
    else:
        total += number
    finally:
        print(f"Process : {value}")

print(total)  # 35
else केवल तभी चलता है जब कोई त्रुटि न हो; finally हमेशा चलता है।

आपके फ़ंक्शन भी raise से अपने खुद के अपवाद उठा सकते हैं, जैसे ही प्राप्त कोई डेटा अमान्य हो: गलत परिणाम देने से बेहतर है कि एक स्पष्ट संदेश के साथ तुरंत विफल हो जाएँ। Exception से विरासत पाती हुई एक समर्पित क्लास परिभाषित करें: कॉल करने वाला उसे विशेष रूप से पकड़ सकेगा, बिना गलती से दूसरी त्रुटियाँ रोके।

PYTHON
class EmptyCartError(Exception):
    pass

def checkout(items):
    if not items:
        raise EmptyCartError("Empty cart.")
    return round(sum(items), 2)

try:
    print(checkout([]))
except EmptyCartError as error:
    print(f"Error : {error}")
एक समर्पित व्यावसायिक अपवाद विफलता को स्पष्ट और लक्षित बना देता है।

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. किसी try/except का else ब्लॉक कब चलता है?
    • केवल तभी जब try में कोई अपवाद न उठा हो
    • केवल तभी जब कोई अपवाद पकड़ा गया हो
    • हर स्थिति में, try के बाद
  2. finally ब्लॉक किन स्थितियों में चलता है?
    • केवल तभी जब कोई अपवाद उठा हो
    • केवल तभी जब कोई अपवाद न उठा हो
    • हर स्थिति में, अपवाद हो या न हो
  3. सब कुछ पकड़ने वाले खाली except: से क्यों बचें?
    • यह असली बग छिपा देता है और डिबग करना बहुत कठिन बना देता है
    • यह किसी लक्षित except से धीमा होता है
    • यह केवल मानक लाइब्रेरी के अपवादों के साथ काम करता है