पायथन में कस्टम अपवाद को कैसे परिभाषित करें? (उदाहरण के साथ)

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

पायथन में कई अंतर्निहित अपवाद हैं जो आपके प्रोग्राम को प्रोग्राम में कुछ गलत होने पर त्रुटि उत्पन्न करने के लिए मजबूर करते हैं।

हालांकि, कभी-कभी आपको अपने स्वयं के कस्टम अपवाद बनाने की आवश्यकता हो सकती है जो आपके उद्देश्य की सेवा करते हैं।

कस्टम अपवाद बनाना

पायथन में, उपयोगकर्ता एक नई कक्षा बनाकर कस्टम अपवादों को परिभाषित कर सकते हैं। इस अपवाद वर्ग को अंतर्निहित Exceptionवर्ग से प्रत्यक्ष या अप्रत्यक्ष रूप से प्राप्त किया जाना है । अधिकांश अंतर्निहित अपवाद भी इसी वर्ग से प्राप्त हुए हैं।

 >>> class CustomError(Exception):… pass… >>> raise CustomError Traceback (most recent call last):… __main__.CustomError >>> raise CustomError("An error occurred") Traceback (most recent call last):… __main__.CustomError: An error occurred

यहां, हमने उपयोगकर्ता-परिभाषित अपवाद बनाया है जिसे कक्षा CustomErrorसे विरासत में मिला है Exception। यह नया अपवाद, अन्य अपवादों की तरह, raiseएक वैकल्पिक त्रुटि संदेश के साथ कथन का उपयोग करके उठाया जा सकता है ।

जब हम एक बड़े पायथन कार्यक्रम को विकसित कर रहे हैं, तो उपयोगकर्ता-परिभाषित सभी अपवादों को रखने के लिए यह एक अच्छा अभ्यास है कि हमारा कार्यक्रम एक अलग फ़ाइल में उठता है। कई मानक मॉड्यूल ऐसा करते हैं। वे अपने अपवादों को अलग-अलग exceptions.pyया errors.py(आमतौर पर हमेशा नहीं) के रूप में परिभाषित करते हैं ।

उपयोगकर्ता-परिभाषित अपवाद वर्ग सब कुछ लागू कर सकता है जो एक सामान्य वर्ग कर सकता है, लेकिन हम आम तौर पर उन्हें सरल और संक्षिप्त बनाते हैं। अधिकांश कार्यान्वयन एक कस्टम बेस क्लास घोषित करते हैं और अन्य बेस क्लास को इस बेस क्लास से अलग करते हैं। इस अवधारणा को निम्नलिखित उदाहरण में स्पष्ट किया गया है।

उदाहरण: पायथन में उपयोगकर्ता-परिभाषित अपवाद

इस उदाहरण में, हम यह बताएंगे कि त्रुटियों को बढ़ाने और पकड़ने के लिए एक कार्यक्रम में उपयोगकर्ता-परिभाषित अपवाद का उपयोग कैसे किया जा सकता है।

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

 # define Python user-defined exceptions class Error(Exception): """Base class for other exceptions""" pass class ValueTooSmallError(Error): """Raised when the input value is too small""" pass class ValueTooLargeError(Error): """Raised when the input value is too large""" pass # you need to guess this number number = 10 # user guesses a number until he/she gets it right while True: try: i_num = int(input("Enter a number: ")) if i_num number: raise ValueTooLargeError break except ValueTooSmallError: print("This value is too small, try again!") print() except ValueTooLargeError: print("This value is too large, try again!") print() print("Congratulations! You guessed it correctly.")

यहाँ इस कार्यक्रम का एक नमूना रन है।

एक संख्या दर्ज करें: 12 यह मान बहुत बड़ा है, फिर से प्रयास करें! एक संख्या दर्ज करें: 0 यह मान बहुत छोटा है, फिर से प्रयास करें! कोई संख्या दर्ज करें: 8 यह मान बहुत छोटा है, फिर से प्रयास करें! एक नंबर दर्ज करें: 10 बधाई! आपने सही अनुमान लगाया।

हमने एक बेस क्लास को परिभाषित किया है Error

अन्य दो अपवाद ( ValueTooSmallErrorऔर ValueTooLargeError) जो वास्तव में हमारे कार्यक्रम द्वारा उठाए गए हैं, इस वर्ग से प्राप्त हुए हैं। यह पायथन प्रोग्रामिंग में उपयोगकर्ता-परिभाषित अपवादों को परिभाषित करने का मानक तरीका है, लेकिन आप केवल इस तरह तक सीमित नहीं हैं।

अपवाद कक्षाएं अनुकूलित करना

हम अपनी आवश्यकताओं के अनुसार अन्य तर्कों को स्वीकार करने के लिए इस वर्ग को और अनुकूलित कर सकते हैं।

अपवाद कक्षाओं को अनुकूलित करने के बारे में जानने के लिए, आपको ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का मूल ज्ञान होना चाहिए।

पायथन ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग पर जाएँ पायथन में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के बारे में सीखना शुरू करें।

आइए एक उदाहरण देखें:

 class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) salary = int(input("Enter salary amount: ")) if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary)

आउटपुट

 वेतन राशि दर्ज करें: 2000 Traceback (सबसे हालिया कॉल अंतिम): फ़ाइल "", पंक्ति 17, वेतन SalaryNotInRangeError (वेतन) __main __ बढ़ाने के लिए। SalaryNotInRangeError: वेतन (5000, 15000) सीमा में नहीं है।

यहां, हमने Exceptionअपने स्वयं के कस्टम तर्कों को स्वीकार करने के लिए वर्ग के निर्माता को ओवरराइड किया है salaryऔर message। फिर, पैरेंट Exceptionक्लास के कंस्ट्रक्टर को मैन्युअल रूप से self.messageतर्क के साथ कहा जाता है super()

कस्टम self.salaryविशेषता को बाद में उपयोग करने के लिए परिभाषित किया गया है।

कक्षा की विरासत में मिली __str__विधि का Exceptionउपयोग तब SalaryNotInRangeErrorउठाया जाता है जब संबंधित संदेश प्रदर्शित किया जाता है।

हम __str__इसे ओवरराइड करके स्वयं विधि को कस्टमाइज़ भी कर सकते हैं ।

 class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) def __str__(self): return f'(self.salary) -> (self.message)' salary = int(input("Enter salary amount: ")) if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary)

आउटपुट

 वेतन राशि दर्ज करें: 2000 Traceback (सबसे हाल ही में कॉल अंतिम): फ़ाइल "/home/bsoyuj/Desktop/Untitled-1.py", पंक्ति 20, SalaryNotInRangeError (वेतन) बढ़ाने में: _main __। SalaryNotInRangeError: 2000 -> वेतन नहीं है। 5000, 15000) रेंज है

आप पायथन में अपवादों को कैसे संभाल सकते हैं, इसके बारे में अधिक जानने के लिए, पायथन एक्सेप्शन हैंडलिंग पर जाएँ।

दिलचस्प लेख...