एक्सेप्शन क्या है?
एक्सेप्शन, जिसे लॉजिकल एरर भी कहा जाता है, प्रोग्राम रनटाइम के दौरान होने वाली एरर है।
पायथन में दो प्रकार की एरर्स होती हैं: सिंटैक्स एरर्स और रनटाइम एरर्स। सिंटैक्स एरर्स प्रोग्राम चलने से पहले उठाई जाती हैं। यदि आपका प्रोग्राम सिंटैक्स एरर का सामना करता है, तो आपका प्रोग्राम चल नहीं पाएगा। ऐसा इसलिए है क्योंकि पायथन सिंटैक्स एरर्स वाले कोड को इंटरप्रेट नहीं कर सकता।
रनटाइम एरर्स, जिन्हें एक्सेप्शन्स भी कहा जाता है, पायथन प्रोग्राम चलाते समय सामने आती हैं। एक्सेप्शन प्रोग्राम की लाइन 30 पर उठाई जा सकती है। यदि लाइन 30 पर एक्सेप्शन उठाई जाती है, तो कोड की 30 लाइनें चलेंगी, फिर प्रोग्राम रुक जाएगा।
एक्सेप्शन का एक उदाहरण यहां है:
Traceback (most recent call last): File "main.py", line 6, ins_names.append(n) AttributeError: 'str' object has no attribute 'append'
यह एक्सेप्शन हमें बताती है कि पायथन हमारे कोड के बाकी हिस्से को नहीं चला सकता। यदि आप एक्सेप्शन का सामना करते हैं, तो आपको मैसेज को ध्यान से पढ़ना चाहिए। एरर मैसेज आपको बताएगा कि एक्सेप्शन को हल करने के लिए आपको क्या जानने की आवश्यकता है, यदि सब कुछ नहीं तो ज्यादातर।
आइए हमारे एरर मैसेज में अंतिम वाक्य को तोड़ें:
AttributeError: 'str' object has no attribute 'append'
इस मामले में, हम जानते हैं कि हमारी एरर AttributeError है। इसका मतलब है कि हम किसी ऐसे एट्रिब्यूट को रेफरेंस करने का प्रयास कर रहे हैं जो मौजूद नहीं है। हमारा एरर मैसेज हमें बताता है कि हम स्ट्रिंग ऑब्जेक्ट पर append() का उपयोग करने का प्रयास कर रहे हैं, जिसकी अनुमति नहीं है।
क्योंकि स्ट्रिंग ऑब्जेक्ट्स append() मेथड को सपोर्ट नहीं करते, एक अच्छा अगला कदम स्ट्रिंग्स के लिए append() के समकक्ष को खोजना है। यह कन्केटनेशन है। अब हमारे पास हमारे प्रोग्रामिंग मुद्दे का संभावित समाधान है जिसे हम लागू कर सकते हैं।
मैं एक्सेप्शन कहां देख सकता हूं?
प्रोग्रामर्स को उनके कोड में एरर्स पकड़ने में मदद करने के लिए, पायथन में बिल्ट-इन एक्सेप्शन्स की एक श्रृंखला है। ये एक्सेप्शन्स आपको अपने कोड में समस्या का कारण पहचानने में मदद कर सकते हैं ताकि आप उन्हें ठीक कर सकें। नीचे कुछ सबसे आम एक्सेप्शन्स हैं जिनका आप सामना करने की संभावना रखते हैं:
- TypeError: तब होता है जब आप किसी ऑब्जेक्ट पर फंक्शन लागू करते हैं जिसका टाइप उस फंक्शन को सपोर्ट नहीं करता। (उदाहरण: TypeError: can only join an iterable)
- SyntaxError: प्रोग्राम एक्जीक्यूट होने से पहले उठाई जाती है ताकि आपको बताया जा सके कि आपके सिंटैक्स में कोई समस्या है (उदाहरण: SyntaxError: invalid syntax)
- KeyError: यदि आप डिक्शनरी में उस की को रेफरेंस करते हैं जो मौजूद नहीं है तो होता है। (उदाहरण: KeyError: "usb_ports")
- ImportError: यदि आप किसी ऐसे पैकेज को इम्पोर्ट करने का प्रयास करते हैं जो मौजूद नहीं है, या किसी पैकेज से ऐसा फंक्शन जो मौजूद नहीं है।
हमने केवल उन कई एक्सेप्शन्स में से कुछ को सूचीबद्ध किया है जिनका आप पायथन भाषा में सामना कर सकते हैं।
एक्सेप्शन कैसे उठाएं
आप अपने कोड में अपने स्वयं के कस्टम एक्सेप्शन्स परिभाषित कर सकते हैं। यह सहायक हो सकता है यदि पायथन द्वारा प्रदान किए गए बिल्ट-इन एक्सेप्शन्स आपके प्रोग्राम की आवश्यकताओं के अनुरूप नहीं हैं।
हम एक प्रोग्राम लिखने जा रहे हैं जो गेम के लिए पासवर्ड को वैलिडेट करता है। शुरू करने के लिए, यूज़र से पासवर्ड डालने के लिए कहें:
password = input("Enter a password: ")
यूज़र के पासवर्ड के वैध होने के लिए, यह 12 कैरेक्टर्स से अधिक लंबा होना चाहिए। यदि यूज़र का पासवर्ड 12 कैरेक्टर्स या उससे कम है, तो हम एक्सेप्शन उठाना चाहते हैं।
ऐसा करने के लिए, हम if स्टेटमेंट का उपयोग करने जा रहे हैं। निम्न if स्टेटमेंट चेक करेगा कि यूज़र द्वारा चुना गया पासवर्ड 12 कैरेक्टर्स से कम है या नहीं:
if len(password) > 12:
print("Your password is valid.")
else:
raise Exception("Your password is not the correct length.")
हम len() मेथड का उपयोग यूज़र के पासवर्ड की लंबाई की गणना करने के लिए करते हैं। यदि यूज़र अमान्य पासवर्ड डालता है, तो हमारा प्रोग्राम "Your password is not the correct length." मैसेज के साथ एक्सेप्शन उठाएगा।
आइए अपने कोड को आज़माएं यह देखने के लिए कि क्या यह काम करता है:
Enter a password: Bacon120 Traceback (most recent call last): File "main.py", line 6, inraise Exception("Your password is not the correct length.") Exception: Your password is not the correct length.
हमने जो पासवर्ड डाला वह 12 कैरेक्टर्स से कम था। हमारा कोड रुक जाता है क्योंकि हमने अमान्य पासवर्ड डाला। आइए वैध पासवर्ड के साथ अपना प्रोग्राम चलाने का प्रयास करें:
Enter a password: Bacon120Bacon120 Your password is valid.
हमारा प्रोग्राम सफलतापूर्वक एक्जीक्यूट होता है।
एक्सेप्शन कैसे हैंडल करें
डिफ़ॉल्ट रूप से, एक्सेप्शन्स प्रोग्राम के एक्जीक्यूशन को रोक देती हैं। हालांकि यह उपयोगी है क्योंकि यह आपको एरर का समाधान खोजने के लिए मजबूर करती है, कुछ मामले ऐसे हैं जहां आप नहीं चाहेंगे कि एक्सेप्शन उठाए जाने पर आपका प्रोग्राम रुक जाए।
उदाहरण के लिए, यदि आप चेक कर रहे हैं कि लिस्ट में डेटा पॉइंट्स वैध हैं, तो आप हर बार अमान्य डेटा पॉइंट खोजे जाने पर एक्सेप्शन नहीं उठाना चाहेंगे।
एक्सेप्शन को हैंडल करने के लिए, आप "try...except" ब्लॉक का उपयोग कर सकते हैं। आइए एक प्रोग्राम लिखते हैं जो डिक्शनरी में आइटम ढूंढता है। इस डिक्शनरी में क्लास में छात्रों के नाम और उनके हालिया टेस्ट पर संबंधित ग्रेड की लिस्ट होती है।
शुरू करने के लिए, छात्र और ग्रेड जानकारी के साथ डिक्शनरी परिभाषित करें:
data = {
"Lucy": 73,
"Carlton": 59,
"Adam": 73
}
अगला, यूज़र से उस छात्र का नाम डालने के लिए कहें जिसका ग्रेड वे प्राप्त करना चाहते हैं। हम इसे "try" ब्लॉक के भीतर करने जा रहे हैं ताकि हम बाद में अपने कोड में एक्सेप्शन को हैंडल कर सकें:
try:
student = input("Enter the name of the student whose grade you want to retrieve: ")
print(data[student])
यह कोड उस छात्र का ग्रेड प्रिंट करेगा जिसका नाम यूज़र द्वारा प्रोग्राम में डाले गए नाम से मेल खाता है। हालांकि, यदि यूज़र अमान्य नाम डालता है, तो KeyError का सामना करना पड़ेगा।
हम इसे अपने कोड में except ब्लॉक जोड़कर हैंडल करने जा रहे हैं:
try:
student = input("Enter the name of the student whose grade you want to retrieve: ")
print(data[student])
except:
print("This student is not present in the list of grades.")
यदि छात्र नहीं मिलता है, तो except क्लॉज एक्जीक्यूट होता है। आइए अपना प्रोग्राम चलाएं:
Enter the name of the student whose grade you want to retrieve: Lucy 73
जब हम वैध छात्र नाम डालते हैं, तो हमारा प्रोग्राम काम करता है। आइए अपना प्रोग्राम आज़माएं यदि हम अमान्य छात्र नाम डालते हैं:
Enter the name of the student whose grade you want to retrieve: Kaitlin This student is not present in the list of grades.
एक्सेप्शन उठाई जाती है लेकिन हमारा प्रोग्राम नहीं रुकता। इसके बजाय, "except" ब्लॉक की सामग्री एक्जीक्यूट होती है।
try...except ब्लॉक के बारे में अधिक जानने के लिए, पायथन try...except पर हमारा गाइड पढ़ें।
निष्कर्ष
एक्सेप्शन्स आपको सूचित करती हैं कि आपके कोड में लॉजिकल एरर है। जब एक्सेप्शन उठाई जाती है, तो आपको एक्सेप्शन का प्रकार, जहां एक्सेप्शन उठाई गई थी, साथ ही एरर मैसेज देखना चाहिए। आप इस जानकारी का उपयोग एक्सेप्शन का कारण ढूंढने के लिए कर सकते हैं।
आप raise स्टेटमेंट का उपयोग करके अपनी स्वयं की एक्सेप्शन्स उठा सकते हैं। आप try...except ब्लॉक का उपयोग करके एक्सेप्शन्स को हैंडल कर सकते हैं।
अब आपके पास पायथन एक्सेप्शन को एक प्रो की तरह हल करने के उपकरण हैं!