कैच मी इफ यू कैन: ए गाइड टू एक्सेप्शन हैंडलिंग इन पाइथन

May 09 2023
स्मार्ट अपवाद प्रबंधन के माध्यम से पायथन की पूरी क्षमता को अनलॉक करें एक सॉफ्टवेयर डेवलपर के रूप में, अपवादों से निपटना अक्सर एक आवश्यक बुराई के रूप में देखा जाता है। फिर भी, पायथन के अपवाद हैंडलिंग सिस्टम की महारत आपको अधिक कुशल और प्रभावी प्रोग्रामर बना सकती है।

स्मार्ट अपवाद प्रबंधन के माध्यम से पायथन की पूरी क्षमता को अनलॉक करें

Unsplash पर कुकी द पोम द्वारा फोटो

एक सॉफ्टवेयर डेवलपर के रूप में, अपवादों से निपटना अक्सर एक आवश्यक बुराई के रूप में देखा जाता है। फिर भी, पायथन के अपवाद हैंडलिंग सिस्टम की महारत आपको अधिक कुशल और प्रभावी प्रोग्रामर बना सकती है।

इस ब्लॉग पोस्ट में, मैं निम्नलिखित की गहन व्याख्या प्रदान करूँगा:

  • एक्सेप्शन हैंडलिंग क्या है?
  • ifवक्तव्य और अपवाद हैंडलिंग के बीच अंतर
  • उचित त्रुटि प्रबंधन के लिए उपयोग elseऔर finallyखंड
  • कस्टम अपवादों को परिभाषित करना
  • एक्सेप्शन हैंडलिंग के लिए सर्वोत्तम अभ्यास

अपवाद हैंडलिंग कोड लिखने की एक प्रक्रिया है जो प्रोग्राम निष्पादन के दौरान होने वाली त्रुटियों या अपवादों को पकड़ने और संभालने के लिए होती है। यह डेवलपर्स को मजबूत कोड लिखने में सक्षम बनाता है जो पूरी तरह से क्रैश होने के बजाय अप्रत्याशित घटनाओं या त्रुटियों के सामने भी चलता रहता है।

जब कोई अपवाद होता है, तो पायथन एक मेल खाने वाले अपवाद हैंडलर की खोज करता है। हैंडलर कोड निष्पादित करेगा और उचित कार्रवाई करेगा, जैसे त्रुटि लॉग करना, त्रुटि संदेश प्रदर्शित करना, या त्रुटि से पुनर्प्राप्त करने का प्रयास करना। कुल मिलाकर, अपवाद हैंडलिंग पायथन अनुप्रयोगों को अधिक विश्वसनीय, बनाए रखने योग्य और डिबग करने में आसान बनाने में मदद करती है।

ifवक्तव्य और अपवाद हैंडलिंग के बीच अंतर

पायथन में स्टेटमेंट्स और एक्सेप्शन हैंडलिंग के बीच प्राथमिक अंतर ifउनके संबंधित लक्ष्यों और उपयोग परिदृश्यों में निहित है।

बयान ifसंरचित प्रोग्रामिंग के लिए एक बुनियादी बिल्डिंग ब्लॉक के रूप में कार्य करता है। यह एक शर्त का मूल्यांकन करता है और स्थिति के सही या गलत होने के आधार पर कोड के विभिन्न ब्लॉकों को निष्पादित करता है। यहाँ एक उदाहरण है:

temperature = int(input("Please enter temperature in Fahrenheit: "))
if temperature > 100:
    print("Hot weather alert! Temperature exceeded 100°F.")
elif temperature >= 70:
    print("Warm day ahead, enjoy sunny skies.")
else:
    print("Bundle up for chilly temperatures.")

अपवादों का उपयोग समस्याओं को इंगित करने और कोड में उन क्षेत्रों को इंगित करने के लिए किया जाता है जिनमें सुधार, डिबगिंग या अतिरिक्त त्रुटि-जांच उपायों की आवश्यकता होती है। वे पायथन को गलत स्थितियों को शालीनता से संभालने की अनुमति देते हैं और अचानक समाप्त करने के बजाय स्क्रिप्ट को निष्पादित करना जारी रखते हैं।

निम्नलिखित उदाहरण पर विचार करें कि आप शून्य से विभाजित करने से संबंधित संभावित विफलताओं को बेहतर ढंग से प्रबंधित करने के लिए अपवाद प्रबंधन को कैसे लागू कर सकते हैं:

# Define a function that tries to divide a number by zero
def divide(x, y):
    result = x / y
    return result
# Call the divide function with x=5 and y=0
result = divide(5, 0)
print(f"Result of dividing {x} by {y}: {result}")

Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
ZeroDivisionError: division by zero attempted

हम कॉल को "विभाजित" फ़ंक्शन को try-exceptब्लॉक के अंदर लपेटकर उपरोक्त अपवाद को संभाल सकते हैं:

# Define a function that tries to divide a number by zero
def divide(x, y):
    result = x / y
    return result
# Call the divide function with x=5 and y=0
try:
    result = divide(5, 0)
    print(f"Result of dividing {x} by {y}: {result}")
except ZeroDivisionError:
    print("Cannot divide by zero.")

Cannot divide by zero.

पायथन में अंतर्निहित अपवादों के बारे में अधिक जानकारी के लिए, आप [2] का उल्लेख कर सकते हैं ।

उचित त्रुटि प्रबंधन के लिए और अंत में क्लाजों का उपयोग करना

पायथन में अपवादों के साथ काम करते समय, यह सलाह दी जाती है कि आप अपने ब्लॉक में दोनों elseऔर खंडों को शामिल करें। क्लॉज आपको यह निर्दिष्ट करने की अनुमति देता है कि यदि कोई अपवाद नहीं उठाया जाता है तो क्या होना चाहिए, जबकि क्लॉज यह सुनिश्चित करता है कि अपवाद होने के बावजूद कुछ क्लीनअप ऑपरेशन हमेशा किए जाते हैं [1] [2] ।finallytry-exceptelsefinally

उदाहरण के लिए, उस परिदृश्य पर विचार करें जहाँ आप किसी फ़ाइल से डेटा पढ़ना चाहते हैं और उस डेटा पर कुछ ऑपरेशन करना चाहते हैं। यदि फ़ाइल पढ़ते समय कोई अपवाद होता है, तो हो सकता है कि आप त्रुटि को लॉग करना और आगे की प्रक्रिया को रोकना चाहें, लेकिन आप अभी भी फ़ाइल को ठीक से बंद करना चाहते हैं।

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

try:
    # Open the file in read mode
    file = open("file.txt", "r")
    print("Successful opened the file")
except FileNotFoundError:
    # Handle missing files
    print("File Not Found Error: No such file or directory")
    exit()
except PermissionError:
    # Handle permission issues
    print("Permission Denied Error: Access is denied")
else:
    # All good, do something with the file data
    content = file.read().decode('utf-8')
    processed_data = process_content(content)
    
# Cleanup after ourselves even if an exception occurred above
finally:
    file.close()

अन्यथा, जब ब्लॉक के भीतर कोई अपवाद नहीं होता है , तो हम शाखा tryमें फ़ाइल सामग्री को संसाधित करने के लिए आगे बढ़ते हैं । elseअंत में, ब्लॉक द्वारा सुनिश्चित किया गया क्लीनअप ऑपरेशन finallyफाइल को बंद कर देता है, भले ही कोई अपवाद पहले उठाया गया हो या नहीं [1] ।

इस तरह एक संरचित दृष्टिकोण अपनाने से, आपका कोड व्यवस्थित रहता है और संभावित त्रुटियों के लिए लेखांकन करते समय पालन करना आसान होता है जो बाहरी सिस्टम या इनपुट के साथ बातचीत करने से उत्पन्न हो सकता है।

कस्टम अपवादों को परिभाषित करना

पायथन में, आप कस्टम अपवादों को बिल्ट-इन अपवादों जैसे कि Exceptionया किसी अन्य वर्ग से सीधे विरासत में प्राप्त करके परिभाषित कर सकते हैं Exception

ऐसा करने के लिए, आपको एक नया वर्ग बनाने की आवश्यकता है जो इन मूल अपवादों में से किसी एक से विरासत में मिले और अपनी आवश्यकताओं के लिए विशिष्ट विशेषताएँ जोड़ें। फिर आप अपने पूरे कोड में अपने नए परिभाषित अपवाद वर्ग का उपयोग कर सकते हैं, जैसे आप किसी अन्य अंतर्निहित अपवाद वर्ग का उपयोग करेंगे।

यहाँ एक कस्टम अपवाद को परिभाषित करने का एक उदाहरण दिया गया है जिसे कहा जाता है InvalidEmailAddress:

class InvalidEmailAddress(ValueError):
    def __init__(self, message):
        super().__init__(message)
        self.msgfmt = message

जब भी आपको कोई अमान्य ईमेल पता स्वरूप मिलता है, आप इस अपवाद को बढ़ा सकते हैं:

def send_email(address):
    if isinstance(address, str) == False:
        raise InvalidEmailAddress("Invalid email address")
# Send email

>>> send_email(None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/path/to/project/main.py", line 8, in send_email
    raise InvalidEmailAddress("Invalid email address")
InvalidEmailAddress: Invalid email address

यहाँ पायथन में त्रुटि प्रबंधन से संबंधित कुछ सर्वोत्तम अभ्यास दिए गए हैं:

  1. विफलता के लिए डिजाइन : संभावित विफलताओं पर विचार करके और उन्हें शानदार ढंग से संभालने के लिए अपने कार्यक्रम को डिजाइन करके आगे की योजना बनाएं। इसका अर्थ है किनारे के मामलों की आशंका और उपयुक्त त्रुटि संचालकों को लागू करना।
  2. वर्णनात्मक त्रुटि संदेशों का उपयोग करें : विस्तृत त्रुटि संदेश या लॉग प्रदान करें जो उपयोगकर्ताओं को यह समझने में मदद करें कि क्या गलत हुआ और क्यों हुआ। "त्रुटि हुई" या "कुछ बुरा हुआ" जैसे सामान्य त्रुटि संदेशों से बचें। इसके बजाय, एक दोस्ताना संदेश प्रदर्शित करें जो समाधान सुझाता है या दस्तावेज़ों के लिंक देता है। विस्तृत निर्देश प्रदान करने और यूआई को बाहरी सामग्री के साथ अव्यवस्थित करने से बचने के बीच संतुलन बनाना सुनिश्चित करें।
  3. साइड इफेक्ट्स को कम करें : अंत में प्रयास करें या संसाधनों के साथ प्रयास करें ब्लॉक के माध्यम से समस्याग्रस्त कोड अनुभागों को अलग करके विफल कार्रवाइयों के परिणामों को कम करें। सफलता या विफलता के परिणामों की परवाह किए बिना सफाई कार्यों को हमेशा निष्पादित करना सुनिश्चित करें।
  4. पूरी तरह से परीक्षण करें : पूरी तरह से परीक्षण करें: व्यापक परीक्षण चलाकर सुनिश्चित करें कि आपके अपवाद हैंडलर विभिन्न परिदृश्यों में सही ढंग से व्यवहार करते हैं।
  5. नियमित रूप से रिफ्लेक्टर : उनकी विश्वसनीयता और प्रदर्शन को बेहतर बनाने के लिए रिफ्लेक्टर त्रुटि-प्रवण कोड सेगमेंट। अपने कोडबेस को मॉड्यूलर और शिथिल युग्मित रखें, जिससे स्वतंत्र भाग दूसरों को नकारात्मक रूप से प्रभावित किए बिना स्वतंत्र रूप से विकसित हो सकें।
  6. महत्वपूर्ण घटनाओं को लॉग करें: फ़ाइल या कंसोल आउटपुट में लॉग इन करके अपने एप्लिकेशन में दिलचस्प घटनाओं का ट्रैक रखें। यह बड़ी मात्रा में असंरचित लॉग के माध्यम से छानबीन किए बिना समस्याओं का शीघ्रता से निदान करने में आपकी सहायता करता है।

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

संसाधन

[1]https://docs.python.org/3/tutorial/errors.html

[2]https://www.geeksforgeeks.org/python-exception-handling/