📘 CodingMarble Learn

पायथन में अपवाद प्रबंधन: गलती पकड़ो, प्रोग्राम चलता रखो

सिंटैक्स एरर प्रोग्राम को चलने से पहले ही रोक देता है। अपवाद (exception) वह गलती है जो चलते समय होती है, जैसे शून्य से भाग या न मिलने वाली फ़ाइल खोलना। प्रबंधन न हो तो प्रोग्राम रुक (क्रैश) जाता है। try और except से पायथन अपवाद पकड़ता है और आपका बचाव वाला कोड चलाता है। else तब चलता है जब कोई अपवाद न हो; finally हर बार चलता है। raise से आप ख़ुद अपवाद फेंक सकते हैं।

🎬 कदम-दर-कदम कहानी

  1. प्रोग्राम पंक्ति-दर-पंक्ति चलता है। गलत पंक्ति (जैसे 10 / 0) अपवाद फेंकती है। जाल न हो तो प्रोग्राम गिर जाता है।
  2. जोखिम वाली पंक्तियाँ try में रखें। अपवाद आते ही पायथन try रोकता है और except के जाल में गिरता है।
  3. हर except एक प्रकार की गलती पकड़ता है, जैसे नाम लिखा जाल: ZeroDivisionError, ValueError। पहला मेल खाता जाल पकड़ता है।
  4. else तभी चलता है जब try बिना गलती पूरा हो। finally हर बार चलता है, गलती हो या न हो, इसलिए सफ़ाई के काम आता है।
  5. raise से आप ख़ुद अपवाद फेंक सकते हैं जब डेटा गलत हो, जैसे ऋणात्मक आयु।
  6. आपकी बारी: भाजक लिखें। देखें कौन-से खंड चमकते हैं: try, except, else, finally।

टिप: 3D दृश्य को घुमाने के लिए खींचें। ज़ूम के लिए दो उंगलियाँ इस्तेमाल करें।

🤔 आम शंकाएँ और उनके जवाब

क्या सिंटैक्स एरर भी अपवाद है?

दोनों अलग हैं। सिंटैक्स एरर चलने से पहले मिलता है, प्रोग्राम शुरू ही नहीं होता। अपवाद चलते समय होता है।

try में गलती के बाद की पंक्तियाँ चलती हैं क्या?

नहीं। गलती पर पायथन तुरंत try छोड़कर except पर जाता है।

कोई except मेल न खाए तो?

अपवाद नहीं पकड़ा जाता। finally फिर भी चलता है, फिर प्रोग्राम ट्रेसबैक के साथ रुक जाता है।

else और finally में क्या अंतर है?

else केवल बिना गलती के चलता है। finally हर बार चलता है।

मैं ख़ुद गलती क्यों उठाऊँ?

जब इनपुट पायथन के हिसाब से सही हो पर आपके प्रोग्राम के लिए गलत, जैसे age = -5। raise साफ़ संदेश के साथ रोक देता है।

सिंटैक्स एरर और अपवाद

सिंटैक्स एरर पायथन लिखने के नियम की गलती है, जैसे कोलन छूटना: if x > 5। पायथन इसे चलाने से पहले पकड़ता है और प्रोग्राम शुरू ही नहीं होता।

अपवाद वह गलती है जो प्रोग्राम चलते समय होती है, भले कोड सही लिखा हो। जैसे print(10 / n) n = 2 पर ठीक है, पर n = 0 पर गिरता है। अपवाद उठने (raise) पर कोई न पकड़े तो पायथन प्रोग्राम रोककर ट्रेसबैक छापता है।

आम बिल्ट-इन अपवाद

try और except

try:
    n = int(input('Number: '))
    print(100 / n)
except ZeroDivisionError:
    print('शून्य से भाग नहीं')
except ValueError:
    print('केवल अंक लिखें')

else और finally

पूरा ढाँचा: try → except → else → finally।

try:
    f = open('marks.txt')
except FileNotFoundError:
    print('फ़ाइल नहीं मिली')
else:
    print(f.read())
    f.close()
finally:
    print('Done')

ख़ुद अपवाद उठाना (raise)

raise जानबूझकर अपवाद फेंकता है जब डेटा गलत हो।

age = int(input('Age: '))
if age < 0:
    raise ValueError('आयु ऋणात्मक नहीं हो सकती')

assert एक झटपट जाँच है: assert age >= 0, 'bad age' शर्त False होने पर AssertionError उठाता है।

करके देखें: अपना प्रोग्राम तोड़िए

दो संख्याएँ लेकर भाग देने वाला छोटा प्रोग्राम लिखिए। चलाकर 0 लिखिए, फिर 'abc' लिखिए। ट्रेसबैक में हर अपवाद का नाम नोट कीजिए। अब कोड को try में रखिए, हर एक के लिए except जोड़िए, और finally में 'धन्यवाद' छापिए। वही इनपुट फिर दीजिए। 3D के आख़िरी कदम में अनुमान लगाइए कि कौन-से खंड चलेंगे।

मुख्य सूत्र और परिभाषाएँ

हल किए गए उदाहरण

1. अपवाद का नाम बताइए: (a) int('12a') (b) [1,2][5] (c) {'a':1}['b'] (d) 7/0 (e) total बनाए बिना print(total)

(a) ValueError (b) IndexError (c) KeyError (d) ZeroDivisionError (e) NameError।

2. n = 0 हो तो आउटपुट: try: print(10/n) except ZeroDivisionError: print('A') else: print('B') finally: print('C')

10/0 से ZeroDivisionError → except ने A छापा। गलती हुई, तो else छूटा। finally ने C छापा। आउटपुट: A C।

3. वही कोड n = 5 के साथ। आउटपुट?

10/5 = 2.0 छपा। गलती नहीं, तो else ने B छापा। finally ने C। आउटपुट: 2.0 B C।

4. ऐसा कोड लिखिए जो तब तक पूछता रहे जब तक उपयोगकर्ता सही पूर्णांक न लिखे।

while True: try: n = int(input('Enter an integer: ')) break except ValueError: print('पूर्णांक नहीं, फिर लिखें') print('आपने लिखा', n)

5. क्या छपेगा? try: L = [1, 2] print(L[3]) print('X') except IndexError: print('Y')

L[3] से IndexError, इसलिए print('X') छूटा। except ने Y छापा। आउटपुट: Y।

6. ऐसा फ़ंक्शन लिखिए जो अंक 0 से 100 के बाहर हों तो ValueError उठाए, और उसे सुरक्षित रूप से कॉल कीजिए।

def check(m): if not 0 <= m <= 100: raise ValueError('Marks out of range') return m try: check(120) except ValueError as e: print('Error:', e) # आउटपुट: Error: Marks out of range

आम गलतियाँ

अभ्यास क्विज़

1. कौन-सा खंड हमेशा चलता है?
2. int('xyz') से कौन-सा अपवाद उठता है?
3. else खंड कब चलता है?
4. कौन-सा कीवर्ड जानबूझकर अपवाद फेंकता है?
5. if के बाद कोलन छूटने पर क्या आता है?

अभ्यास: खुद जवाब दो

अपना जवाब लिखो या चुनो, फिर जाँचें दबाओ। अटको तो संकेत देखो; जवाब देने के बाद पूरा हल दिखेगा।

अक्सर पूछे जाने वाले प्रश्न

पायथन में अपवाद प्रबंधन क्या है?

प्रोग्राम चलते समय आई गलतियों को try और except से पकड़ना, ताकि प्रोग्राम क्रैश होने की जगह संदेश दिखाकर चलता रहे।

पायथन में finally का क्या उपयोग है?

finally का कोड हर बार चलता है, अपवाद हो या न हो। फ़ाइल बंद करने जैसे सफ़ाई के काम के लिए।

सिंटैक्स एरर और अपवाद में क्या अंतर है?

सिंटैक्स एरर लिखने के नियम तोड़ता है और चलने से पहले मिलता है। अपवाद चलते समय आता है।

यह कहाँ पढ़ाया जाता है

सीबीएसई (भारत)कक्षा 12संगणनात्मक चिंतन और प्रोग्रामिंग - 2

पहले यह पढ़ें

आगे पढ़ें

इससे जुड़े पाठ

सभी कंप्यूटर विज्ञान पाठ