Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन अपवाद:एक गाइड

अपवादों को पायथन दुभाषिया और मैन्युअल रूप से उठाया जा सकता है। अंतर्निहित अपवाद प्रोग्राम में सामान्य त्रुटियों को पकड़ने में मदद करते हैं।

इस गाइड में, हम चर्चा करने जा रहे हैं कि अपवाद क्या है और उनका उपयोग कैसे किया जाता है। हम एक उदाहरण के माध्यम से चलेंगे कि कैसे एक अपवाद उठाया जाए ताकि आप उनके साथ अपने कोड में काम कर सकें।

अपवाद क्या है?

एक अपवाद, जिसे तार्किक त्रुटि भी कहा जाता है, एक त्रुटि है जो प्रोग्राम रनटाइम के दौरान होती है।

पायथन में दो प्रकार की त्रुटियां हैं:सिंटैक्स त्रुटियां और रनटाइम त्रुटियां। प्रोग्राम चलने से पहले सिंटैक्स त्रुटियां उठाई जाती हैं। यदि आपका प्रोग्राम सिंटैक्स त्रुटि का सामना करता है, तो आपका प्रोग्राम नहीं चल पाएगा। ऐसा इसलिए है क्योंकि पायथन उस कोड की व्याख्या नहीं कर सकता है जिसमें सिंटैक्स त्रुटियां हैं।

रनटाइम त्रुटियाँ, जिन्हें अपवाद भी कहा जाता है, का सामना तब करना पड़ता है जब पायथन एक प्रोग्राम चलाता है। एक कार्यक्रम की लाइन 30 पर एक अपवाद उठाया जा सकता है। यदि लाइन 30 पर एक अपवाद उठाया जाता है, तो कोड की 30 लाइनें चलेंगी, तो कार्यक्रम बंद हो जाएगा।

यहाँ एक अपवाद का उदाहरण दिया गया है:

Traceback (most recent call last):
  File "main.py", line 6, in <module>
	s_names.append(n)
AttributeError: 'str' object has no attribute 'append'

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

आइए हमारे त्रुटि संदेश में अंतिम वाक्य को तोड़ें:

81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।

बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।

विशेषता त्रुटि:'str' ऑब्जेक्ट में कोई विशेषता नहीं है 'संलग्न'

इस मामले में, हम जानते हैं कि हमारी त्रुटि एक विशेषता त्रुटि है। इसका मतलब है कि हम एक ऐसी विशेषता को संदर्भित करने का प्रयास कर रहे हैं जो मौजूद नहीं है। हमारा त्रुटि संदेश हमें बताता है कि हम एक स्ट्रिंग ऑब्जेक्ट पर एपेंड () का उपयोग करने की कोशिश कर रहे हैं, जिसकी अनुमति नहीं है।

क्योंकि स्ट्रिंग ऑब्जेक्ट append() . का समर्थन नहीं करते हैं विधि, एक अच्छा अगला कदम append() . के समकक्ष की तलाश करना है तार के लिए। यह संघटन है। अब हमारे पास अपनी प्रोग्रामिंग समस्या का एक संभावित समाधान है जिसे हम लागू कर सकते हैं।

मुझे अपवाद कहां मिल सकता है?

प्रोग्रामर को अपने कोड में त्रुटियों को पकड़ने में मदद करने के लिए, पायथन में कई अंतर्निहित अपवाद हैं। ये अपवाद आपके कोड में किसी समस्या के कारण की पहचान करने में आपकी सहायता कर सकते हैं ताकि आप उन्हें ठीक कर सकें। नीचे कुछ सबसे सामान्य अपवाद दिए गए हैं जिनका आपको सामना करना पड़ सकता है:

  • लेखन त्रुटि:तब होती है जब आप किसी ऐसे ऑब्जेक्ट पर कोई फ़ंक्शन लागू करते हैं जिसका प्रकार उस फ़ंक्शन का समर्थन नहीं करता है। (उदाहरण के लिए TypeError:केवल एक चलने योग्य में शामिल हो सकता है)
  • सिंटैक्स त्रुटि:किसी प्रोग्राम के निष्पादित होने से पहले उठाई गई आपको यह बताने के लिए कि आपके सिंटैक्स में कोई समस्या है (उदा. सिंटैक्स त्रुटि:अमान्य सिंटैक्स)
  • KeyError:तब होती है जब आप किसी ऐसे शब्दकोश में किसी कुंजी का संदर्भ देते हैं जो मौजूद नहीं है। (उदा. KeyError:“usb_ports”)
  • ImportError:तब होती है जब आप किसी ऐसे पैकेज को आयात करने का प्रयास करते हैं जो मौजूद नहीं है, या किसी ऐसे पैकेज से कोई फ़ंक्शन जो मौजूद नहीं है।

हमने केवल कुछ अपवादों को सूचीबद्ध किया है जिनका आप पायथन भाषा में सामना कर सकते हैं।

अपवाद कैसे उठाएं

आप अपने कोड में अपने स्वयं के कस्टम अपवादों को परिभाषित कर सकते हैं। यह मददगार हो सकता है यदि पायथन द्वारा प्रदान किए गए अंतर्निहित अपवाद आपके कार्यक्रम की आवश्यकताओं के अनुरूप नहीं हैं।

हम एक प्रोग्राम लिखने जा रहे हैं जो किसी गेम के लिए पासवर्ड की पुष्टि करता है। शुरू करने के लिए, उपयोगकर्ता को पासवर्ड डालने के लिए कहें:

password = input("Enter a password: ")

उपयोगकर्ता का पासवर्ड मान्य होने के लिए, यह 12 वर्णों से अधिक लंबा होना चाहिए। यदि उपयोगकर्ता का पासवर्ड 12 वर्ण या उससे कम है, तो हम एक अपवाद उठाना चाहते हैं।

ऐसा करने के लिए, हम एक if स्टेटमेंट का उपयोग करने जा रहे हैं। निम्नलिखित यदि कथन जाँच करेगा कि उपयोगकर्ता द्वारा चुना गया पासवर्ड 12 वर्णों से कम है या नहीं:

if len(password) > 12:
	print("Your password is valid.")
else:
	raise Exception("Your password is not the correct length.")

हम उपयोगकर्ता के पासवर्ड की लंबाई की गणना करने के लिए लेन () विधि का उपयोग करते हैं। यदि कोई उपयोगकर्ता अमान्य पासवर्ड डालता है, तो हमारा प्रोग्राम "आपका पासवर्ड सही लंबाई नहीं है" बताते हुए एक संदेश के साथ एक अपवाद उठाएगा।

आइए हमारे कोड को देखें कि क्या यह काम करता है:

Enter a password: Bacon120
Traceback (most recent call last):
  File "main.py", line 6, in <module>
	raise 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.

हमारा प्रोग्राम सफलतापूर्वक निष्पादित होता है।

अपवाद को कैसे हैंडल करें

डिफ़ॉल्ट रूप से, अपवाद प्रोग्राम के निष्पादन को रोक देंगे। हालांकि यह उपयोगी है क्योंकि यह आपको किसी त्रुटि का समाधान खोजने के लिए मजबूर करता है, कुछ ऐसे मामले हैं जहां आप नहीं चाहते कि आपका प्रोग्राम अपवाद उठाए जाने पर निष्पादित करना बंद कर दे।

उदाहरण के लिए, यदि आप जाँच कर रहे हैं कि क्या सूची में डेटा बिंदु मान्य हैं, तो हो सकता है कि आप हर बार एक अमान्य डेटा बिंदु की खोज में एक अपवाद नहीं उठाना चाहते।

एक अपवाद को संभालने के लिए, आप "कोशिश करें ... को छोड़कर" ब्लॉक का उपयोग कर सकते हैं। आइए एक प्रोग्राम लिखें जो एक डिक्शनरी में एक आइटम ढूंढता है। इस शब्दकोश में एक कक्षा में छात्रों के नाम और उनके सबसे हाल के परीक्षण पर उनके संबंधित ग्रेड की एक सूची है।

शुरू करने के लिए, आइए छात्र और ग्रेड जानकारी के साथ एक शब्दकोश को परिभाषित करें:

data = {
	"Lucy": 73,
	"Carlton": 59,
	"Adam": 73
}

इसके बाद, एक उपयोगकर्ता से एक नाम डालने के लिए कहें जिसका ग्रेड वे पुनः प्राप्त करना चाहते हैं। हम इसे "कोशिश" ब्लॉक में करने जा रहे हैं ताकि हम अपने कोड में बाद में अपवाद को संभाल सकें:

try:
	student = input("Enter the name of the student whose grade you want to retrieve: ")
	print(data[student])

यह कोड उस छात्र के ग्रेड का प्रिंट आउट लेगा जिसका नाम उस छात्र से मेल खाता है जिसे उपयोगकर्ता ने प्रोग्राम में डाला है। हालाँकि, यदि कोई उपयोगकर्ता कोई ऐसा नाम सम्मिलित करता है जो अमान्य है, तो एक KeyError का सामना करना पड़ेगा।

हम अपने कोड में एक को छोड़कर ब्लॉक जोड़कर इसे संभालने जा रहे हैं:

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.")

यदि कोई छात्र नहीं मिल सकता है, तो खंड को छोड़कर निष्पादित किया जाता है। आइए अपना कार्यक्रम चलाते हैं:

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.

एक अपवाद उठाया जाता है लेकिन हमारा कार्यक्रम नहीं रुकता। इसके बजाय, "छोड़कर" ब्लॉक की सामग्री को निष्पादित किया जाता है।

ट्राई के बारे में अधिक जानने के लिए…ब्लॉक को छोड़कर, हमारे गाइड को पढ़ें पायथन ट्राई… को छोड़कर।

निष्कर्ष

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

आप उठाएँ कथन का उपयोग करके अपने स्वयं के अपवाद उठा सकते हैं। आप कोड के ब्लॉक को छोड़कर try… का उपयोग करके अपवादों को संभाल सकते हैं।

अब आपके पास एक समर्थक की तरह एक पायथन अपवाद को हल करने के लिए आवश्यक उपकरण हैं!


  1. सूची समझ में एक पायथन अपवाद कैसे पकड़ें?

    पायथन में कोई अंतर्निहित फ़ंक्शन नहीं है जो आपको अपवाद को संभालने या अनदेखा करने देता है, इसलिए सूची समझ में सभी अपवादों को संभालना संभव नहीं है क्योंकि सूची समझ में एक या अधिक अभिव्यक्तियां होती हैं; केवल कथन अपवादों को पकड़/अनदेखा/संभाल सकते हैं। किसी फ़ंक्शन के लिए अपवाद-प्रवण उप-अभिव्यक्तियों क

  1. रूबी में अपवादों के लिए एक शुरुआती गाइड

    दूसरे दिन मैं शुरुआती लोगों के लिए लिखे गए रूबी अपवादों का परिचय खोज रहा था - वे लोग जो मूल रूबी सिंटैक्स को जानते हैं लेकिन वास्तव में यह सुनिश्चित नहीं हैं कि अपवाद क्या है या यह क्यों उपयोगी है। मुझे एक नहीं मिला, इसलिए मैंने खुद इस पर जाने का फैसला किया। मुझे उम्मीद है कि आप इसे उपयोगी पाएँ। यदि

  1. रूबी में अपवाद

    एक अपवाद एक विशेष डेटा संरचना है जिसमें असाधारण . के बारे में जानकारी होती है आपके आवेदन में हो रही स्थिति। अपवाद तब भेजे जाते हैं जब आपका प्रोग्राम चलना जारी नहीं रख सकता क्योंकि यह नहीं जानता कि किसी विशिष्ट स्थिति से कैसे निपटा जाए। रूबी में, हम ऐसे सिग्नल भेजने को कहते हैं उठाना एक अपवाद। raise