अपवाद हैंडलिंग आपके प्रोग्राम के उन हिस्सों के लिए त्रुटि संदेशों को अनुकूलित और प्रदर्शित करने की आपकी क्षमता है जो काम करने में विफल रहते हैं।
चाहे आप वेबसाइट बना रहे हों, एपीआई बना रहे हों, मॉड्यूल बना रहे हों, या पायथन का उपयोग करके कोई अन्य उत्पाद बना रहे हों, अपवादों को प्रभावी ढंग से संभालने की आपकी क्षमता से आप स्पष्ट रूप से त्रुटि का कारण बता सकते हैं।
यहां, हम देखेंगे कि आप पायथन में अपवादों को कैसे संभाल सकते हैं।
पायथन में एक्सेप्शन हैंडलिंग कैसे काम करती है
जब आप अपवाद उठाते हैं, तो आप पायथन को एक संदेश लाने के लिए कह रहे हैं जब भी कोड का एक ब्लॉक विफल हो जाता है। एक्सेप्शन हैंडलिंग किसी को वजन उठाने की कोशिश करने के लिए कहने जैसा है। और अगर वे नहीं कर सकते हैं, तो उन्हें आपको बताना चाहिए।
हालाँकि, पायथन में एक अपवाद को बढ़ाने के लिए, आप पायथन को कोड के एक विशेष ब्लॉक को आज़माने और चलाने के लिए कहेंगे। यदि वह ब्लॉक विफल हो जाता है, तो आप पाइथन को असफल कोड के लिए परिभाषित अपवाद बढ़ाने के लिए कह सकते हैं।
आपको पायथन प्रोग्रामिंग में अपवादों का उपयोग कब करना चाहिए?
अधिकांश अवसरों पर, आप अपवादों का उपयोग करके मानक पायथन त्रुटियों को छिपा सकते हैं। लेकिन आपको सतर्क रहने की जरूरत है, क्योंकि ऐसा करने से डिबगिंग की समस्या हो सकती है। नतीजतन, आपको संभावित बग के मूल कारण का पता लगाना मुश्किल हो सकता है।
इसलिए, जब आपने अपने कोड का पर्याप्त परीक्षण कर लिया है, तो आपको अपवादों का उपयोग करना चाहिए, और आप सुनिश्चित हैं कि यह काम करता है। अंततः, कोड के बजाय उपयोगकर्ता के अंत से उत्पन्न होने वाली संभावित दोषों को संभालने के लिए उनका उपयोग करना सबसे अच्छा अभ्यास है।
दूसरे शब्दों में, आप अपवादों को चेतावनी उपकरण के रूप में उपयोग कर सकते हैं ताकि उपयोगकर्ताओं को आपके प्रोग्राम का उपयोग करने के तरीके के बारे में मार्गदर्शन किया जा सके।
पायथन अपवादों को संभालना
पायथन में अपवादों को संभालने के लिए, आपको सबसे पहले अपना कोड a. में लपेटना होगा कोशिश करें...सिवाय खंड मैथा। कभी-कभी, आपको a include को शामिल करने की आवश्यकता हो सकती है आखिरकार आपकी आवश्यकताओं के आधार पर आगे की कार्रवाइयों को संभालने के लिए कथन।
पायथन अपवादों की कोडिंग अवधारणा आम तौर पर इस तरह दिखती है:
प्रयत्न:
"कोड निष्पादित किया जाना है"
के सिवाय:
"त्रुटि संदेश"
जैसा कि पहले उल्लेख किया गया है, आप इसका भी उपयोग कर सकते हैं आखिरकार एक अपवाद ब्लॉक में। लेकिन जो कोड आप अंदर लिखते हैं a आखिरकार खंड स्वतंत्र है और चलता है कि कोई अपवाद है या नहीं।
संक्षेप में, यह तब काम आता है जब आपके पास कोड का एक और ब्लॉक होता है जिसे आप लगातार चलाना चाहते हैं, भले ही इसमें क्या होता है कोशिश करें...सिवाय खंड मैथा।
यहाँ एक उदाहरण है:
प्रयत्न:
प्रिंट (9+6)
के सिवाय:
प्रिंट ("त्रुटि संदेश")
आखिरकार:
प्रिंट ("कृपया पुनः आरंभ करें")
आउटपुट:
15
कृपया पुनः प्रारंभ करें
उपरोक्त कोड में, कृपया पुनः प्रारंभ करें लगातार चलता है, भले ही कोई अपवाद हो या न हो।
एक अन्य शर्त भी अनुसरण कर सकती है a के सिवाय बयान:
प्रयत्न:
सी = 2 + बी
के सिवाय:
प्रिंट ("बी को परिभाषित करने की आवश्यकता है")
अन्य:
प्रिंट (यू"सफलतापूर्वक जोड़ा गया! परिणाम %s"%(C))
आउटपुट: बी को परिभाषित करने की जरूरत है
अब इसे "बी" परिभाषित के साथ फिर से प्रयास करें:
प्रयत्न:
बी = 5
सी = 2 + बी
के सिवाय:
प्रिंट ("बी को परिभाषित करने की आवश्यकता है")
अन्य:
प्रिंट (यू"सफलतापूर्वक जोड़ा गया! परिणाम %s"%(C))
आउटपुट: सफलतापूर्वक जोड़ा गया! परिणाम 7. है
उपरोक्त उदाहरण अमानकीकृत अपवाद हैं। लेकिन जब आप बिल्ट-इन (परिभाषित) अपवादों को गैर-मानकीकृत अपवादों के साथ जोड़ते हैं, तो आपके पास अधिक स्पष्ट अपवाद हो सकते हैं:
प्रयत्न:
सी = 2 + बी
त्रुटि के रूप में NameError को छोड़कर:
प्रिंट (गलती, ":", "बी को परिभाषित करने की आवश्यकता है, कृपया")
अन्य:
प्रिंट (यू"सफलतापूर्वक जोड़ा गया! परिणाम %s"%(C))
आउटपुट: नाम 'बी' परिभाषित नहीं है: बी को परिभाषित करने की जरूरत है, कृपया
उपरोक्त अपवाद पहले जाँचता है कि क्या वहाँ a है नाम त्रुटि में प्रयत्न खंड मैथा। यह तब मानक प्रिंट करता है नाम त्रुटि अपवाद पहले ("नाम 'बी' परिभाषित नहीं है")। और आपके लिखित अपवाद के साथ इसका समर्थन करता है ("बी को परिभाषित करने की आवश्यकता है, कृपया")।
सम्बंधित: बुनियादी प्रोग्रामिंग सिद्धांत हर प्रोग्रामर को पता होना चाहिए
और अगर आप अपवादों की एक श्रृंखला को संभालना चाहते हैं, तो आप भी साथ दे सकते हैं a प्रयत्न कई. के साथ ब्लॉक करें के सिवाय बयान। यह बहुत आसान है अगर आपका प्रयत्न ब्लॉक में कई अपवाद होने की संभावना है:
प्रयत्न:
बी = 5
सी = 2 + बी
डी = फ्लोट (6)
एफ = 7/0
त्रुटि के रूप में NameError को छोड़कर:
प्रिंट (गलती,":", "बी को परिभाषित करने की आवश्यकता है, कृपया")
ValueError को वैल के रूप में छोड़कर:
प्रिंट (वैल,":", "आप उस डेटा को परिवर्तित नहीं कर सकते")
ZeroDivisionError को छोड़कर Zeroerr के रूप में:
प्रिंट (शून्य से,":", "आप किसी संख्या को शून्य से विभाजित नहीं कर सकते")
अन्य:
प्रिंट (यू"ऑपरेशन सफल! परिणाम हैं: %s, %s, और %s"%(C, D, F))
आउटपुट: शून्य से भाग: आप किसी संख्या को शून्य से विभाजित नहीं कर सकते
क्या होगा यदि विभाजन वैध है? उदाहरण के लिए, प्रतिस्थापित करना एफ = 7/0 उपरोक्त कोड में एफ = 7/5 देता है:
आउटपुट: ऑपरेशन सफल! परिणाम हैं: 7, 6.0, और 1.4
पायथन में उपयोगकर्ता-परिभाषित अपवाद
आप अपने अपवाद के साथ भी आ सकते हैं और उन्हें बाद में अपने कार्यक्रम में बुला सकते हैं। इससे आप अपने अपवाद का विशिष्ट विवरण दे सकते हैं और इसे अपनी पसंद के अनुसार नाम दे सकते हैं।
फिर भी, प्रत्येक उपयोगकर्ता-परिभाषित अपवाद (प्रत्यक्ष या अप्रत्यक्ष रूप से) अभी भी बिल्ट-इन- से आता है अपवाद पायथन की कक्षा।
नीचे दिया गया उदाहरण कोड आधार का संदर्भ देता है अपवाद सीधे कॉल करके रनटाइम त्रुटि इसमें से:
वर्ग कनेक्शन त्रुटि (रनटाइम त्रुटि):
def __init__ (स्वयं, मान):
स्वयं मूल्य = मूल्य
प्रयत्न:
कनेक्शन बढ़ाएँ त्रुटि ("खराब होस्टनाम")
कनेक्शन को छोड़कर त्रुटि के रूप में त्रुटि:
प्रिंट (गलती मूल्य)
आउटपुट: खराब होस्टनाम
ध्यान दें कि संपर्क त्रुटि, इस मामले में, एक उपयोगकर्ता-परिभाषित वर्ग है, जिसे आप अपने प्रोग्राम में कभी भी ज़रूरत पड़ने पर बढ़ा सकते हैं।
सम्बंधित: पायथन के साथ नियमित अभिव्यक्तियों के लिए शुरुआती मार्गदर्शिका
आप इसे सीधे से प्राप्त करके उपयोगकर्ता द्वारा परिभाषित अपवाद बना सकते हैं अपवाद आधार वर्ग। नीचे दिया गया अपवाद, हालांकि, 6 से 5 के घटाव को रोकता है और सीधे बेस क्लास से अपवाद को कॉल करता है:
वर्ग त्रुटियाँ (अपवाद):
उत्तीर्ण करना
कक्षा छह पांच त्रुटि (त्रुटियां):
def __init__ (स्वयं, मान, संदेश):
स्वयं मूल्य = मूल्य
स्वयं संदेश = संदेश =
प्रयत्न:
छह बढ़ाएँFiveError (6-5, "इस घटाव की अनुमति नहीं है")
ई के रूप में छह फाइव एरर को छोड़कर:
प्रिंट ("एक त्रुटि हुई:", ई.संदेश)
आउटपुट: एक त्रुटि हुई: इस घटाव की अनुमति नहीं है
व्यवहार में, आप पहले परिभाषित अपवाद का उपयोग किसी अन्य फ़ंक्शन में कॉल करके कर सकते हैं। उदाहरण के लिए, आप एक बना सकते हैं फ्लोट त्रुटि जो केवल दो फ्लोट्स को जोड़ने की अनुमति देता है:
# पहले आधार अपवाद वर्ग को कॉल करें:
वर्ग त्रुटियाँ (अपवाद):
उत्तीर्ण करना
# अगला, बेस क्लास से अपना अपवाद प्राप्त करें:
वर्ग FloatError (त्रुटियों):
def __init__ (स्वयं, मान, संदेश):
स्वयं मूल्य = मूल्य
स्वयं संदेश = संदेश =
# दो फ्लोट जोड़ने के लिए एक फ़ंक्शन बनाएं:
def addTwoFloat (ए, बी):
अगर (टाइप (ए) और टाइप (बी))! = फ्लोट:
फ्लोट एरर बढ़ाएं (ए + बी, "संख्या जोड़ने के लिए फ्लोट होना चाहिए")
अन्य:
प्रिंट (ए + बी)
AddTwoFloat (4, 7)
आउटपुट: __main__.FloatError: (11, 'नंबर जोड़ने के लिए फ्लोट होना चाहिए')
क्योंकि आपने अब परिभाषित किया है a फ्लोट त्रुटि वर्ग, यदि आप दो गैर-फ्लोट शाब्दिकों का उपयोग करके जोड़ने का प्रयास करते हैं, तो पायथन इसे बढ़ाता है AddtwoFloat समारोह।
आप प्रिंट कर सकते हैं फ्लोट त्रुटि क्लास उसी पायथन फ़ाइल में जहाँ आपने इसे बनाया है यह देखने के लिए कि क्या होता है:
प्रिंट (फ्लोट एरर)
आउटपुट:
फ्लोट त्रुटि, हालांकि, एक अंतर्निहित पायथन अपवाद नहीं है। आप इसे कॉल करके सत्यापित कर सकते हैं फ्लोट त्रुटि एक और ताज़ा पायथन फ़ाइल में जहाँ आपने यह वर्ग नहीं बनाया है:
प्रिंट (फ्लोट एरर)
आउटपुट: NameError: नाम 'FloatError' परिभाषित नहीं है
आपको एक मिलता है नाम त्रुटि क्योंकि पायथन इसे मानक अपवाद के रूप में नहीं पहचानता है।
आप अन्य त्रुटि वर्गों को स्वयं परिभाषित करने का प्रयास कर सकते हैं यह देखने के लिए कि वे कैसे खेलते हैं।
अपवादों के साथ अपने पायथन प्रोग्राम को अधिक उपयोगकर्ता के अनुकूल बनाएं
पायथन में कई मानक अपवाद हैं। लेकिन आप अपना भी परिभाषित कर सकते हैं। फिर भी, आपके प्रोग्राम का उपयोग करने में आसानी कुछ हद तक इस बात पर निर्भर करती है कि यह विभिन्न अपवादों (चाहे उपयोगकर्ता-परिभाषित, गैर-विशिष्ट, या मानक) को कैसे संभालता है।
हालाँकि, अपवाद आपको यह निर्धारित करने देते हैं कि जब उपयोगकर्ता उनके साथ इंटरैक्ट करते हैं तो आपका प्रोग्राम कैसे काम करना चाहिए। स्पष्ट रूप से और संक्षिप्त रूप से त्रुटि का कारण बताते हुए उपयोगकर्ताओं को यह भी पता चलता है कि वे क्या गलत कर रहे हैं, और कभी-कभी, यह उन्हें सही दिशा में इंगित करता है।
अपने आप को अपने रास्ते में आने वाले हर पायथन बग को खत्म करने की जानकारी से लैस करें।
आगे पढ़िए
- प्रोग्रामिंग
- अजगर
- कोडिंग ट्यूटोरियल
Idowu कुछ भी स्मार्ट तकनीक और उत्पादकता के बारे में भावुक है। अपने खाली समय में, वह कोडिंग के साथ खेलता है और जब वह ऊब जाता है तो शतरंज की बिसात पर चला जाता है, लेकिन उसे कभी-कभी दिनचर्या से अलग होना भी पसंद होता है। लोगों को आधुनिक तकनीक के बारे में बताने का उनका जुनून उन्हें और अधिक लिखने के लिए प्रेरित करता है।
हमारे न्यूज़लेटर की सदस्यता
तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!
एक और क़दम…!
कृपया अपने ईमेल पते की पुष्टि उस ईमेल में करें जिसे हमने अभी आपको भेजा है।