पायथन के मूल तत्व: प्रोग्रामिंग में आपकी पहली कदम

Back to Learn

Python आधारभूत बातें: प्रोग्रामिंग में आपका पहला कदम

Lesson 15 of 16 • 10 XP

Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

त्रुटियाँ किसी भी प्रोग्राम में अपरिहार्य होती हैं, और Python उन्हें संभालने के लिए कई तरीके प्रदान करता है।
त्रुटि संभालना यह सुनिश्चित करने के लिए महत्वपूर्ण है कि आपका प्रोग्राम सुरक्षित और प्रभावी ढंग से चलते रहे, भले ही कुछ अप्रत्याशित हो जाए।

इस पाठ में, हम विभिन्न प्रकार की त्रुटियों, उन्हें कैसे संभालें, अपने खुद के त्रुटि उठाने के तरीके, और महत्वपूर्ण क्लीनअप कार्यों को हमेशा निष्पादित करने के तरीके को खोजेंगे।


Python में त्रुटियों के प्रकार

त्रुटियों को संभालना सीखने से पहले, हमें दो मुख्य प्रकारों को समझना होगा:

  • सिंटैक्स त्रुटियाँ: ये तब होती हैं जब Python कोड व्याकरण की दृष्टि से सही नहीं होता। ये प्रोग्राम चलने से पहले Python इंटरप्रेटर द्वारा पकड़ी जाती हैं।
    उदाहरण: यदि if स्टेटमेंट के बाद कॉलॉन भूल जाना।

  • अपवाद (Exceptions): ये तब होते हैं जब प्रोग्राम चल रहा होता है और कुछ अप्रत्याशित होता है — उदाहरण के लिए, किसी संख्या को शून्य से भाग देना या सूची में अमान्य इंडेक्स तक पहुंचना।

try और except के साथ अपवाद संभालना

Python में अपवादों को संभालने का सबसे सामान्य तरीका try/except ब्लॉक है:

  • try ब्लॉक में वह कोड होता है जो अपवाद उत्पन्न कर सकता है।
  • except ब्लॉक में वह कोड होता है जो अपवाद उठने पर चलता है।

उदाहरण:

try:
    file = open("file.txt", "r")
    content = file.read()
    print(content)
except IOError:
    print("फाइल खोली नहीं जा सकी।")

यहाँ:

  • यदि "file.txt" मौजूद नहीं है या खोली नहीं जा सकती, तो Python एक IOError उठाता है।
  • except ब्लॉक इसे पकड़ लेता है और स्नेहपूर्ण संदेश दिखाता है, जिससे प्रोग्राम क्रैश नहीं होता।
सुझाव: try ब्लॉक को जितना संभव हो छोटा रखें — केवल वह कोड शामिल करें जो विफल हो सकता है, कोई असंबंधित लॉजिक नहीं।

एकाधिक अपवाद प्रकारों को संभालना

आप कई except ब्लॉक्स का उपयोग करके अलग-अलग अपवाद प्रकारों को अलग से संभाल सकते हैं:

try:
    # कोड जो अपवाद उठा सकता है
except TypeError:
    # टाइप त्रुटियों को संभालें
except ValueError:
    # मान त्रुटियों को संभालें
except:
    # अन्य किसी भी अपवाद को संभालें

अंतिम बेजोड़ except किसी भी अनहैंडल्ड अपवाद को पकड़ता है — लेकिन इसे सावधानी से उपयोग करें क्योंकि यह अप्रत्याशित बग्स को छिपा सकता है।

अपने स्वयं के अपवाद उठाना

कभी-कभी आपका प्रोग्राम यह संकेत देना चाहता है कि कुछ गलत हुआ है — भले ही Python इसे सामान्यतः त्रुटि के रूप में न देखे। आप raise स्टेटमेंट का उपयोग करके अपवाद उठा सकते हैं।

उदाहरण:

def divide(a, b):
    if b == 0:
        raise ValueError("दूसरा तर्क शून्य नहीं हो सकता")
    return a / b

print(divide(10, 2))  # 5.0
print(divide(10, 0))  # ValueError: दूसरा तर्क शून्य नहीं हो सकता

यह आपको स्पष्ट त्रुटि संदेश परिभाषित करने और अमान्य डेटा मिलने पर निष्पादन रोकने देता है।

finally ब्लॉक

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

उदाहरण:

try:
    file = open("file.txt", "r")
    content = file.read()
    print(content)
finally:
    file.close()

यदि फाइल पढ़ते समय त्रुटि होती भी है, तब भी finally ब्लॉक फाइल को बंद करने को सुनिश्चित करता है।

महत्वपूर्ण!: लीक से बचने के लिए फाइलें हमेशा finally ब्लॉक में बंद करें (या "with" स्टेटमेंट का उपयोग करें)।


समझ गए — यहाँ Error Handling पाठ में एक अतिरिक्त अनुभाग है, जो बताता है कि "try/except सब कुछ" क्यों खराब अभ्यास है और लक्षित अपवाद संभालना कब सही विकल्प होता है।


बिना वजह हर अपवाद को पकड़ने से बचें

अधिकांश शुरुआती एक बड़ी मात्रा में कोड को एकल try/except ब्लॉक में लपेट देते हैं जो सब कुछ पकड़ लेता है — या इससे भी बुरा, बिना किसी अपवाद प्रकार के सिर्फ एक खाली except: का उपयोग करते हैं।

खराब अभ्यास का उदाहरण:

try:
    # यहाँ बहुत सारा असंबंधित कोड
except:
    pass  # सभी त्रुटियों को चुपचाप अनदेखा करता है

यह खतरे भरा क्यों है:

  • बग छिपाता है: आपके कोड में वास्तविक गलतियाँ नजरअंदाज हो जाती हैं, जो उन्हें ढूँढ़ना कठिन बनाती हैं।
  • कारण छिपाता है: आप खो देते हैं कि वास्तव में क्या विफल हुआ।
  • अनपेक्षित व्यवहार उत्पन्न कर सकता है: प्रोग्राम अवैध स्थिति में चलते रहता है।

व्यापक अपवाद हैंडलिंग कब करें

सभी अपवादों को पकड़ना (except Exception:) दुर्लभ और जानबूझकर होना चाहिए। ऐसे उदाहरण जहाँ यह उचित हो सकता है:

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

सर्वोत्तम अभ्यास

  • विशिष्ट बनें: केवल उन अपवादों को पकड़ें जिनकी आप अपेक्षा करते हैं और जिन्हें आप समझते हैं कि कैसे संभालना है।
  • try ब्लॉक को छोटा रखें: केवल उस कोड को लपेटें जो फेल हो सकता है, पूरे फ़ंक्शन को नहीं।
  • अपवाद को हमेशा लॉग करें या अर्थपूर्ण रूप से संभालें — सिर्फ "pass" न करें और भूल जाएं।

चयनात्मक बनकर, आप अपना कोड डिबग करना आसान, सुरक्षित और अधिक पूर्वानुमानित बना लेते हैं।


सारांश

त्रुटि संभालना Python प्रोग्रामिंग का एक मूलभूत भाग है:

  • यह अप्रत्याशित क्रैश को रोकता है।
  • यह आपको समस्याओं को सहजता से निस्तारित करने की अनुमति देता है।
  • यह आपके कोड को अधिक मजबूत, विश्वसनीय और सुरक्षित बनाता है।

अपवादों को समझकर, कस्टम त्रुटियाँ उठाकर, और finally का उपयोग करके, आप ऐसे प्रोग्राम लिखेंगे जो वास्तविक दुनिया के लिए बेहतर तैयार होंगे।