अपवाद आपके पायथन कार्यक्रमों में त्रुटियों से निपटने का एक शक्तिशाली और सुंदर तरीका है। कस्टम अपवाद इस शक्ति को एक नए स्तर पर ले जाते हैं।
पायथन की अंतर्निहित अपवाद कक्षाएं आपके कोड में उत्पन्न होने वाली कुछ त्रुटि स्थितियों को संबोधित नहीं करती हैं। ऐसे मामलों में, आपको इन त्रुटियों को प्रभावी ढंग से संभालने के लिए कस्टम अपवाद बनाने की आवश्यकता होगी।
पायथन में, आप कस्टम अपवादों को परिभाषित कर सकते हैं और विशिष्ट त्रुटि स्थितियां होने पर उन्हें बढ़ा सकते हैं। आप कस्टम अपवादों के साथ विशिष्ट, सूचनात्मक त्रुटियों को प्रबंधित कर सकते हैं, जिससे आपके कोड की पठनीयता और रखरखाव में सुधार हो सकता है।
आपको कस्टम अपवादों की आवश्यकता क्यों है?
किसी एप्लिकेशन के विकास के दौरान, कोड में बदलाव, अन्य पैकेज या लाइब्रेरी के साथ एकीकरण और बाहरी ऐप्स के साथ इंटरैक्शन के कारण विभिन्न त्रुटि परिदृश्य उत्पन्न हो सकते हैं। इन त्रुटियों से उबरने के लिए या विफलता को शालीनता से संभालने के लिए उन्हें संभालना महत्वपूर्ण है।
पायथन कई प्रकार की पेशकश करता है अंतर्निहित अपवाद ऐसी कक्षाएं जो त्रुटियों को कवर करती हैं जैसे कि
मूल्य त्रुटि, त्रुटि प्रकार, FileNotFoundError, और अधिक। हालाँकि ये अंतर्निहित अपवाद अपने उद्देश्य को अच्छी तरह से पूरा करते हैं, लेकिन वे कभी-कभी ही आपके एप्लिकेशन में होने वाली त्रुटियों का सटीक रूप से प्रतिनिधित्व कर सकते हैं।कस्टम अपवाद बनाकर, आप उन्हें विशेष रूप से अपने एप्लिकेशन की आवश्यकताओं के अनुरूप तैयार कर सकते हैं और आपके कोड का उपयोग करने वाले डेवलपर्स के लिए जानकारी प्रदान कर सकते हैं।
कस्टम अपवादों को कैसे परिभाषित करें
कस्टम अपवाद बनाने के लिए, पायथन क्लास को परिभाषित करें जो कि विरासत में मिला है अपवाद वर्ग. अपवाद क्लास आधार कार्यक्षमता प्रदान करता है जिसकी आपको अपवादों को संभालने के लिए आवश्यकता होगी, और आप अपनी विशिष्ट आवश्यकताओं के आधार पर सुविधाओं को जोड़ने के लिए इसे अनुकूलित कर सकते हैं।
कस्टम अपवाद वर्ग बनाते समय, त्रुटि जानकारी संग्रहीत करने के लिए आवश्यक विशेषताओं को शामिल करते हुए उन्हें सरल रखें। अपवाद हैंडलर त्रुटियों को उचित रूप से संभालने के लिए इन विशेषताओं तक पहुंच सकते हैं।
यहाँ एक कस्टम अपवाद वर्ग है, MyCustomError:
classMyCustomError(Exception):
def__init__(self, message=None):
self.message = message
super().__init__(message)
यह वर्ग आरंभीकरण के दौरान एक वैकल्पिक संदेश तर्क स्वीकार करता है। इसका उपयोग करता है बहुत अच्छा() आधार के कंस्ट्रक्टर को कॉल करने की विधि अपवाद क्लास, जो अपवाद प्रबंधन के लिए आवश्यक है।
कस्टम अपवाद कैसे बढ़ाएं
त्रुटि उत्पन्न करने के लिए, का उपयोग करें उठाना कीवर्ड के बाद आपके कस्टम अपवाद वर्ग का एक उदाहरण, इसे एक तर्क के रूप में एक त्रुटि संदेश पास करना:
ifTrue:
raise MyCustomError("A Custom Error Was Raised...")
आप बिना कोई तर्क पारित किए भी त्रुटि उठा सकते हैं:
ifTrue:
raise MyCustomError # shorthand
कस्टम त्रुटियों को बढ़ाने के लिए कोई भी प्रारूप उपयुक्त है।
कस्टम अपवादों को कैसे संभालें
कस्टम अपवादों को संभालना उसी दृष्टिकोण का अनुसरण करता है अंतर्निहित अपवादों को संभालना. उपयोग कोशिश, के अलावा, और अंत में कस्टम अपवादों को पकड़ने और उचित कार्रवाई करने के लिए ब्लॉक।
try:
print("Hello, You're learning how to MakeUseOf Custom Errors")
raise MyCustomError("Opps, Something Went Wrong...")
except MyCustomError as err:
print(f"Error: {err}")
finally:
print("Done Handling Custom Error")
इस तरह, आप उठाए गए सभी प्रकार के कस्टम अपवादों को संभाल सकते हैं।
यदि a के निष्पादन के दौरान कोई अपवाद होता है कोशिश ब्लॉक, एक संगत के अलावा ब्लॉक इसे पकड़ और संभाल सकता है। यदि कोई उपयुक्त नहीं है के अलावा अपवाद को संभालने के लिए ब्लॉक करें, कोई भी अंत में ब्लॉक निष्पादित होगा, इसके बाद अपवाद फिर से उठाया जाएगा। का उपयोग करो अंत में ब्लॉक मुख्य रूप से सफ़ाई कार्यों को करने के लिए है जो किसी भी परिस्थिति में चलना चाहिए, चाहे कोई अपवाद हो या नहीं।
try:
raise KeyboardInterrupt
except MyCustomError as err:
print(f"Error: {err}")
finally:
print("Did not Handle the KeyboardInterrupt Error. \
Can Only Handle MyCustomError")
इस नमूने में, ए कीबोर्डइंटरप्ट अपवाद होता है, लेकिन के अलावा केवल हैंडल को ब्लॉक करें MyCustomError अपवाद. इस मामले में, अंत में ब्लॉक चलता है, और फिर हैंडल न किया गया अपवाद फिर से उठता है।
कस्टम त्रुटि वर्ग इनहेरिट करना
पर आधारित ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की अवधारणा (ओओपी), आप नियमित कक्षाओं की तरह, कस्टम अपवाद कक्षाओं से भी विरासत प्राप्त कर सकते हैं। कस्टम अपवाद वर्ग से विरासत में प्राप्त करके, आप त्रुटि वर्ग बना सकते हैं जो अपवाद को अधिक विशिष्ट संदर्भ प्रदान करते हैं। यह दृष्टिकोण आपको अपने कोड में विभिन्न स्तरों पर त्रुटियों को संभालने की अनुमति देता है और त्रुटि के कारण की बेहतर समझ प्रदान करता है।
मान लें कि आप एक वेब एप्लिकेशन विकसित कर रहे हैं जो बाहरी एपीआई के साथ इंटरैक्ट करता है। इस API में भिन्न त्रुटि परिदृश्य हो सकते हैं. आप अपने पूरे कोड में इन त्रुटियों को लगातार और स्पष्ट रूप से संभालना चाहेंगे। इसे प्राप्त करने के लिए, एक कस्टम अपवाद वर्ग बनाएं, बेसएपीआईएक्सेप्शन:
classBaseAPIException(Exception):
Base class for API-related exceptions.
def__init__(self, message):
super().__init__(message)
self.message = message
एक बार जब आपके पास यह आधार कस्टम अपवाद वर्ग हो, तो आप इससे प्राप्त होने वाले बाल अपवाद वर्ग बना सकते हैं:
classAPINotFoundError(BaseAPIException):
Raised when the requested resource is not found in the API.
passclassAPIAuthenticationError(BaseAPIException):
Raised when there's an issue with authentication to the API.
pass
classAPIRateLimitExceeded(BaseAPIException):
Raised when the rate limit for API requests is exceeded.
pass
अपने वेब एप्लिकेशन के भीतर एपीआई पर कॉल करते समय इन कस्टम अपवादों को उठाएं और पकड़ें। अपने कोड में उचित तर्क का उपयोग करके उन्हें तदनुसार संभालें।
defrequest_api():
try:
# Simulate an API error for demonstration purposes
raise APINotFoundError("Requested resource not found.")
except APINotFoundError as err:
# Log or handle the 'Not Found' error case
print(f"API Not Found Error: {err}")
except APIAuthenticationError:
# Take appropriate actions for authentication error
print(f"API Authentication Error: {err}")
except APIRateLimitExceeded:
# Handle the rate limit exceeded scenario
print(f"API Rate Limit Exceeded: {err}")
except BaseAPIException:
# Handle other unknown API exceptions
print(f"Unknown API Exception: {err}")
अंतिम अपवाद खंड मूल वर्ग के विरुद्ध जांच करता है और किसी भी अन्य एपीआई-संबंधित त्रुटियों के लिए कैच-ऑल के रूप में कार्य करता है।
जब आपको कस्टम अपवाद कक्षाएं विरासत में मिलती हैं, तो आप एपीआई के भीतर त्रुटियों को प्रभावी ढंग से संभाल सकते हैं। यह दृष्टिकोण आपको अपनी त्रुटि प्रबंधन को एपीआई के कार्यान्वयन विवरण से अलग करने की अनुमति देता है, एपीआई के विकसित होने या नई त्रुटि का सामना करने पर कस्टम अपवाद जोड़ना या परिवर्तन करना आसान हो जाता है मामले.
कस्टम अपवाद लपेटना
अपवादों को लपेटने का अर्थ है किसी अपवाद को पकड़ना, उसे एक कस्टम अपवाद के भीतर समाहित करना, और फिर मूल अपवाद को उसके कारण के रूप में संदर्भित करते हुए उस कस्टम अपवाद को उठाना। यह तकनीक त्रुटि संदेशों को संदर्भ प्रदान करने में मदद करती है और कार्यान्वयन विवरण को कॉलिंग कोड से छिपा कर रखती है।
उस परिदृश्य पर विचार करें जहां आपका वेब ऐप एपीआई के साथ इंटरैक्ट करता है। यदि एपीआई बढ़ाता है लुकअपत्रुटि, आप इसे पकड़ सकते हैं, फिर एक कस्टम बढ़ा सकते हैं APINotFoundError अपवाद जो लुकअप एरर को इसके कारण के रूप में संदर्भित करता है:
defrequest_api():
try:
# Simulate an API error for demonstration purposes
# Assuming the external API raised a LookupError
raise LookupError("Sorry, You Encountered A LookUpError !!!")
except LookupError as original_exception:
try:
# Wrap the original exception with a custom exception
raise APINotFoundError \
("Requested resource not found.") from original_exception
except APINotFoundError as wrapped_exception:
# Handle the wrapped exception here
print(f"Caught wrapped API exception: {wrapped_exception}")# or re-raise it if necessary
raise
try:
request_api()
except APINotFoundError as err:
print(f"Caught API exception: {err.__cause__}")
का उपयोग करो से के साथ खंड उठाना आपके कस्टम अपवाद के भीतर मूल अपवाद को संदर्भित करने के लिए कथन।
जब कस्टम अपवाद होता है, तो इसमें मूल अपवाद को शामिल किया जाता है __कारण__ विशेषता, कस्टम अपवाद और मूल के बीच एक लिंक प्रदान करती है। यह आपको अपवाद की उत्पत्ति का पता लगाने देता है।
अपवादों को लपेटकर, आप अपने कोड या एपीआई के आंतरिक कार्यान्वयन विवरण का खुलासा किए बिना, अधिक सार्थक संदर्भ प्रदान कर सकते हैं और उपयोगकर्ताओं को अधिक उपयुक्त त्रुटि संदेश भेज सकते हैं। यह आपको संरचित और समान तरीके से त्रुटियों के प्रकार को प्रबंधित और संबोधित करने की सुविधा भी देता है।
पायथन में कक्षा व्यवहार को अनुकूलित करना
पायथन द्वारा प्रदान किए गए आधार अपवाद वर्ग को प्राप्त करके, आप सरल और उपयोगी अपवाद बना सकते हैं जिन्हें आप अपने कोड में विशिष्ट त्रुटियां होने पर बढ़ा सकते हैं। आप जादू या डंडर विधियों की सहायता से अपने अपवाद वर्गों के लिए कस्टम व्यवहार भी लागू कर सकते हैं।