python try except python handling exception with examples
यह ट्यूटोरियल प्रोग्रामिंग उदाहरणों की मदद से ब्लॉक को छोड़कर कोशिश का उपयोग करते हुए पायथन में एक्सेप्शन हैंडलिंग की व्याख्या करता है:
दो त्रुटि प्रकारों को अचानक रोकने के लिए एक पायथन कार्यक्रम का कारण हो सकता है अर्थात्। सिंटेक्स त्रुटियां , तथा अपवाद । इस ट्यूटोरियल में, हम कई महत्वपूर्ण विषयों के तहत दूसरे त्रुटि प्रकार (अपवाद) पर चर्चा करेंगे।
हम अपने आवेदन में अपवादों को संभालने से बहुत लाभान्वित होंगे जैसे:
- एक मजबूत अनुप्रयोग बनाना।
- एक स्वच्छ और त्रुटि मुक्त कोड बनाना।
=> विशेष पायथन प्रशिक्षण ट्यूटोरियल श्रृंखला के लिए यहां जाएं
आप क्या सीखेंगे:
- अजगर को छोड़कर प्रयास करें
- आम पायथन अपवाद
- निष्कर्ष
अजगर को छोड़कर प्रयास करें
एक अच्छी खबर यह है कि पायथन में हमारे कोड में त्रुटियों को पकड़ने के लिए अच्छी संख्या में अंतर्निहित अपवाद हैं। इसके अलावा, यह हमें कस्टम अपवाद बनाने का अवसर देता है जब कोई भी अंतर्निहित अपवाद हमारी आवश्यकताओं के अनुरूप नहीं होता है।
एक अपवाद क्या है
तो पायथन में एक अपवाद क्या है? ठीक है, सरल शब्दों में, जब भी पायथन दुभाषिया अमान्य कोड को निष्पादित करने की कोशिश करता है, तो यह एक अपवाद को जन्म देता है, और ऐसे मामलों में जहां इस तरह के अपवाद को नियंत्रित नहीं किया जाता है, यह कार्यक्रम के निर्देशों के सामान्य प्रवाह को बाधित करता है और एक ट्रेसबैक प्रिंट करता है।
आइए एक अमान्य कोड बनाएं और देखें कि पायथन दुभाषिया कैसे प्रतिक्रिया देगा।
एक पायथन शेल खोलें और निम्नलिखित कोड चलाएं।
>>> 50/0
यह प्रोग्रामिंग में सबसे आम त्रुटियों में से एक है। उपरोक्त कोड संख्या को विभाजित करने का प्रयास करता है पचास द्वारा द्वारा ० (शून्य)। पायथन दुभाषिया इसे एक अमान्य ऑपरेशन के रूप में देखता है और उठाता है ZeroDivisionError , कार्यक्रम को बाधित करता है, और एक ट्रेसबैक प्रिंट करता है।
हम स्पष्ट रूप से देख सकते हैं ZeroDivisionError वह अपवाद है जो उठाया गया था। यह वास्तव में पायथन का अपना तरीका है जो हमें बताता है कि किसी संख्या को शून्य से विभाजित करना अच्छा नहीं है। हालांकि जावास्क्रिप्ट जैसी अन्य भाषाओं में, यह कोई त्रुटि नहीं है; और अजगर इस अभ्यास को सख्ती से मना करता है।
इसके अलावा, यह जानना महत्वपूर्ण है कि यह केवल एक अपवाद वस्तु है और पायथन में ऐसी कई वस्तुएं हैं। इस पायथन अधिकारी की जाँच करें प्रलेखन सभी पायथन बिल्ट-इन अपवादों को देखने के लिए।
ट्रेसेबैक को समझना
इससे पहले कि हम अपवादों को संभालने में लगें, मुझे लगता है कि यह समझने में मदद मिलेगी कि अपवादों को संभाले जाने पर वास्तव में क्या होगा और पायथन हमें अपनी त्रुटि के बारे में सूचित करने के लिए अपनी पूरी कोशिश करता है।
जब भी पायथन एक त्रुटि का सामना करता है, तो यह एक अपवाद को जन्म देता है। यदि इस अपवाद को नियंत्रित नहीं किया जाता है, तो यह कुछ जानकारी पैदा करता है जिसे ट्रेसबैक कहा जाता है। तो, इस ट्रेसबैक में क्या जानकारी है?
इसमें शामिल है:
- त्रुटि संदेश जो हमें बताता है कि इस अपवाद को बढ़ाने से पहले क्या अपवाद उठाया गया था और क्या हुआ था।
- इस त्रुटि के कारण कोड की विभिन्न पंक्ति संख्याएँ। फ़ंक्शन कॉल के अनुक्रम के कारण त्रुटि हो सकती है जिसे a कहा जाता है कॉल स्टैक जिसके बारे में हम बाद में यहां चर्चा करेंगे।
हालांकि यह थोड़ा भ्रमित करने वाला है, हम वादा करते हैं कि अगला उदाहरण हमारी समझ में और अधिक रोशनी लाएगा।
ट्रेसबैक को याद करें, जिसे ऊपर से 0 से विभाजित करके 50 तक प्रिंट किया गया था, हम देख सकते हैं कि ट्रेसबैक में निम्नलिखित जानकारी है:
- फ़ाइल '': यह हमें बताता है कि यह कोड कंसोल टर्मिनल से चलाया गया था।
- लाइन 1: यह हमें बताता है कि इस लाइन नंबर में त्रुटि हुई।
- ZeroDivisionError: द्वारा विभाजन शून्य: यह हमें बताता है कि क्या अपवाद उठाया गया था और इसका क्या कारण था।
आइए एक और उदाहरण देखें और देखें कि कैसे कॉल स्टैक की तरह लगता है। एक संपादक खोलें, नीचे दिए गए कोड को दर्ज करें और इस रूप में सहेजें ट्रेसबैक एक्सपी । खट्टा
def stack1(numb): # 1 div = 0 # 2 stack2(numb, div) # 3 def stack2(numb, div): # 5 compute = numb/div # 6 print(compute) # 7 if __name__ == '__main__': # 9 numb = 5 # 10 stack1(numb) # 11
निर्देशिका में एक टर्मिनल खोलें जहां यह फ़ाइल मिली है और चलाएं।
python tracebackExp.py
आप निम्न ट्रेसबैक देखेंगे:
उपरोक्त ट्रेसबैक भ्रामक लग सकता है लेकिन वास्तव में, यह नहीं है। पाइथोनिस्टस ट्रेसबैक पढ़ने का सबसे अच्छा तरीका है, जो कि है नीचे से ऊपर । तो, आइए इस बुद्धि का उपयोग करें और समझने की कोशिश करें कि यह ट्रेसबैक क्या है।
- सबसे नीचे, हमें वह अपवाद मिलता है जो उठाया गया था और इसे क्यों उठाया गया था।
- ऊपर बढ़ते हुए, हमें फ़ाइल नाम मिलता है ट्रेसबैक एक्सपी .py जहाँ यह त्रुटि हुई, वह गणना जिसने इस त्रुटि की गणना की, = सुन्न / div, फ़ंक्शन स्टैक 2 और लिंक संख्या 6 जहां यह संगणना की गई थी।
- ऊपर बढ़ते हुए, हम देखते हैं कि हमारे स्टैक 2 फ़ंक्शन को फ़ंक्शन स्टैक 1 में लाइन नंबर 3 में बुलाया गया था।
- सबसे ऊपर की ओर बढ़ते हुए, हम देखते हैं कि फ़ंक्शन स्टैक 1 को लाइन नंबर 11 में बुलाया गया था।< मापांक > हमें बताता है कि यह वह फ़ाइल है जिसे निष्पादित किया जा रहा है।
आम पायथन अपवाद
पायथन पुस्तकालय निर्मित अपवादों के एक बहुत कुछ को परिभाषित करता है। आप पायथन डॉक्यूमेंटेशन की जांच कर सकते हैं या बिल्ट-इन कॉल कर सकते हैं स्थानीय () नीचे के रूप में कार्य:
>>> dir(locals()('__builtins__'))
हम इन सभी अपवादों को संबोधित करने का प्रयास नहीं करेंगे, लेकिन हम कुछ सामान्य अपवादों को देखेंगे जिन्हें आप संभवतः पूरा कर लेंगे।
# 1) टाइप करें
यह तब उठाया जाता है जब किसी अनुचित प्रकार के ऑब्जेक्ट पर कोई ऑपरेशन या फ़ंक्शन लागू होता है।
उदाहरण 1
नीचे दिए गए कार्यक्रम पर विचार करें। यह एक लाभांश और भाजक में लेता है, फिर भाजक द्वारा विभाजन को विभाजित करने के परिणाम की गणना और प्रिंट करता है।
def compute_division(): dividend = int(input('Enter the dividend: ')) # cast string to int divisor = input('Enter the divisor: ') # no casting # Compute division result = dividend/divisor # print result print('The result of {}/{} is: {}'.format(dividend, divisor, result)) if __name__ == '__main__': result = compute_division()
हम उपयोगकर्ता से लाभांश और भाजक के मूल्य का अनुरोध करते हैं, लेकिन हम भाजक के स्ट्रिंग मान को पूर्णांक में डालना भूल जाते हैं। इसलिए, हम लाभांश के पूर्णांक के साथ समाप्त होते हैं ( पूर्णांक ) और भाजक का प्रकार स्ट्रिंग है ( पी ) है। हम तो मिल जाते हैं त्रुटि प्रकार डिवीजन ऑपरेटर के रूप में (/) स्ट्रिंग्स पर काम नहीं करता है।
आपको यह जानना दिलचस्प हो सकता है कि पायथन के विपरीत, जावास्क्रिप्ट में टाइप क्यूरेशन है जो मूल रूप से एक ऑपरेंड के प्रकार को दूसरे ऑपरेंड के प्रकार के समकक्ष मूल्य के लिए कनवर्ट करता है जब ऑपरेंड विभिन्न प्रकार के होते हैं।
# 2) ValueError
यह तब उठाया जाता है जब एक ऑपरेशन या फ़ंक्शन एक तर्क प्राप्त करता है जिसमें सही प्रकार लेकिन एक अनुचित मूल्य होता है।
उदाहरण 2
में हमारे कार्यक्रम पर विचार करें उदाहरण 1 ऊपर।
यदि उपयोगकर्ता ’3a’ जैसे लाभांश के लिए एक अल्फ़ान्यूमेरिक मान इनपुट करता है, तो हमारा प्रोग्राम ValueError अपवाद को बढ़ाएगा। ऐसा इसलिए है, हालांकि पाइथन int () विधि किसी भी संख्या या स्ट्रिंग में ले जाती है और पूर्णांक वस्तु लौटाती है, स्ट्रिंग मान में अक्षर या कोई गैर-संख्यात्मक मान नहीं होना चाहिए।
# 3) गुण
किसी विशेषता को निर्दिष्ट या संदर्भित करते समय यह अपवाद उठाया जाता है जो मौजूद नहीं है।
उदाहरण 3
नीचे कार्यक्रम पर विचार करें। यह एक संख्या में लेता है और इसका उपयोग करके अपने वर्गमूल की गणना करता है पायथन गणित मॉड्यूल
import math # import math library to gain access to its code def compute_square_root(number): # compute the square root using the math library result = math.sqr(number) return result if __name__ == '__main__': # get input to compute from user number = int(input('Compute Square root of: ')) # call function to compute square root
जब कोई उपयोगकर्ता किसी संख्या में प्रवेश करता है, तो हमारा प्रोग्राम गणित मॉड्यूल से एक फ़ंक्शन का उपयोग करके इसके वर्गमूल की गणना करने की कोशिश करता है, लेकिन बस यहीं, हमने एक त्रुटि की। Sqrt के बजाय, हमने गलती से sqr टाइप किया जो गणित मॉड्यूल में मौजूद नहीं है।
इसलिए, हम एक विशेषता वर्ग को संदर्भित करने का प्रयास कर रहे थे जो मौजूद नहीं था और इसके कारण एट्रीब्यूटर को उठाया जा रहा था। हम में से ज्यादातर लोग इस तरह की गलती बहुत करते हैं। तो, आप अकेले नहीं हैं।
अपवाद को आज़मा कर देखें
एक प्रोग्रामर के रूप में, एक चीज जो हम में से अधिकांश अपना समय व्यतीत करेंगे, एक मजबूत कोड लिख रहा है जो लचीला है। वह कोड जो कुछ त्रुटियों के कारण टूटता नहीं है। पायथन में, हम अपने बयानों को एक के अंदर संलग्न करके इसे प्राप्त कर सकते हैं प्रयत्न - के सिवाय बयान।
पायथन ट्राई-सिवाय बयान
कोशिश को छोड़कर बयान में निम्नलिखित संरचना है:
try: #your code goes here except '''Specify exception type(s) here''': #handle exception here
कोड को कोड में संलग्न करें ट्रेसबैक एक्सपी एक प्रयास को छोड़कर बयान के अंदर .py
def stack1(numb): # 1 div = 0 # 2 stack2(numb, div) # 3 def stack2(numb, div): # 5 try: # 6 compute = numb/div # 7 print(compute) # 8 except ZeroDivisionError as zde: # 9 print(zde) # 10 if __name__ == '__main__': # 12 numb = 5 # 13 stack1(numb) # 14 print('program continuous') # 15
इस कोड को चलाने से आउटपुट उत्पन्न होगा
यह है कि कोशिश को छोड़कर बयान कैसे काम करता है। पायथन कोशिश ब्लॉक में कोड निष्पादित करता है लाइन 7-8 । यदि कोई अवैध कोड नहीं मिला है, तो कोड को छोड़कर ब्लॉक में पंक्ति 10 छोड़ दिया जाता है और निष्पादन जारी रहता है।
लेकिन, यदि कोई अमान्य कोड पाया जाता है, तो तुरंत प्रयास ब्लॉक में निष्पादन बंद हो जाता है और जाँचता है कि क्या अपवाद उस विवरण के साथ मेल खाता है जिसे हमने अपवाद कथन में प्रदान किया है पंक्ति ९ । यदि यह मेल खाता है, तो अपवाद ब्लॉक को निष्पादित किया जाता है और जारी रहता है। यदि यह नहीं होता है, तो कार्यक्रम बाधित होगा।
कोशिश-ब्लॉक में आमतौर पर कोड होता है जो अपवाद को छोड़ सकता है जबकि अपवाद-ब्लॉक को पकड़ता है और अपवाद को संभालता है।
सिवाय एकाधिक अपवादों को संभालने के
हम एक एकल 'छोड़कर' या कई 'एक्सेप्ट' के साथ कई अपवादों को संभाल सकते हैं। यह सब इस बात पर निर्भर करता है कि आप प्रत्येक अपवाद को कैसे संभालना चाहते हैं।
# 1) एक एकल को छोड़कर कई अपवादों को संभालना
try: #your code goes here except(Exception1(, Exception2(,...ExceptionN)))): #handle exception here
इस पद्धति का उपयोग तब किया जाता है जब हमें संदेह होता है कि हमारा कोड अलग-अलग अपवादों को उठा सकता है और हम प्रत्येक मामले में एक ही कार्रवाई करना चाहते हैं। तो, यदि पायथन दुभाषिया एक मैच पाता है, तो सिवाय ब्लॉक में लिखे कोड निष्पादित करेगा।
आइए नीचे दिए गए उदाहरण पायथन कोड पर विचार करें
def get_fraction(value, idx): arr = (4,5,2,0) # a list of numbers idx_value = arr(idx) # if idx is > arr length, IndexError will be raised value/idx_value # if idx_value == 0, ZeroDivisionError will be raised if __name__ =='__main__': # set 'value' and 'idx' value = 54 idx = 3 # call function in a try-except statement. try: result = get_fraction(value, idx) print('Fraction is ', result) except (IndexError, ZeroDivisionError) as ex: print(ex)
हमारे पास दो संभावित अपवाद हैं जिन्हें यहां उठाया जा सकता है, ZeroDivisionError तथा अनुक्रमणिका । यदि इनमें से कोई अपवाद उठाया जाता है, तो अपवाद ब्लॉक को निष्पादित किया जाएगा।
उपरोक्त कोड में, idx = 3, इसलिए idx_ मूल्य 0 हो जाता है और मूल्य / आईडीएक्स_ मूल्य ZeroDivisionError को बढ़ाएगा
# 2) कई एक्सेप्ट के साथ कई एक्सेप्शन को हैंडल करना
try: #your code goes here except Exception1: #handle exception1 here except Exception2: #handle exception2 here except ExceptionN: #handle exceptionN here
यदि हम प्रत्येक अपवाद को अलग से संभालना चाहते हैं, तो यह है कि आप इसे कैसे कर सकते हैं।
नीचे दिए गए उदाहरण पायथन कोड पर विचार करें
def get_fraction(value, idx): arr = (4,5,2,0) # a list of numbers idx_value = arr(idx) # if idx is > arr length, IndexError will be raised value/idx_value # if idx_value == 0, ZeroDivisionError will be raised if __name__ =='__main__': # set 'value' and 'idx' value = 54 idx = 5 # call function in a try-excepts statement. try: result = get_fraction(value, idx) print('Fraction is ', result) except IndexError: print('idx of {} is out of range'.format(idx)) except ZeroDivisionError: print('arr({}) is 0. Hence, can't divide by zero'.format(idx)) except Exception as ex: print(ex) print('Not sure what happened so not safe to continue, app will be interrupted') raise ex
हम यहाँ देखते हैं कि अपवाद को बयान को छोड़कर अंतिम में उपयोग किया गया था। ऐसा इसलिए है क्योंकि अपवाद ऑब्जेक्ट अपवाद अपवाद से मेल खाता है। इस कारण से, यह हमेशा अंतिम होना चाहिए, क्योंकि पायथन एक मैच के बाद अन्य अपवाद हैंडलर की जांच करना बंद कर देगा।
उपरोक्त कोड में, idx = 5 , इसलिये गिरफ्तारी (आईडीएक्स) उठेंगे अनुक्रमणिका इसलिये आइडीएक्स सूची की लंबाई से अधिक है आगमन
इसके अलावा, यह सुनिश्चित न करें कि आपके आवेदन द्वारा क्या अपवाद उठाया गया था, निष्पादन को जारी रखने के लिए सुरक्षित नहीं है। यही कारण है कि किसी भी अप्रत्याशित अपवाद को पकड़ने के लिए हमारे पास अपवाद है। फिर, हम उपयोगकर्ता को सूचित करते हैं और उसी अपवाद को बढ़ाकर आवेदन को बाधित करते हैं।
एल्स स्टेटमेंट आज़माएं
यह एक वैकल्पिक सुविधा अपवाद से निपटने और आपको वह कोड जोड़ने की अनुमति देता है जिसे आप तब चलाना चाहते हैं जब कोई त्रुटि नहीं हुई हो। यदि कोई त्रुटि होती है, तो यह और-ब्लॉक नहीं चलेगी।
उदाहरण के लिए पायथन कोड बोलो पर विचार करें, अपना संपादक खोलें और कोड को अन्य के रूप में सहेजें
def fraction_of_one(divisor): value = 1/divisor # if divisor is zero, ZeroDivisionError will be raised return value if __name__ == '__main__': while True: try: # Get input from the user. # if input is not a valid argument for int(), ValueError will be raised divisor = int(input('Enter a divisor: ')) # call our function to compute the fraction value = fraction_of_one(divisor) except (ValueError, ZeroDivisionError): print('Input can't be zero and should be a valid literal for int(). Please, try again!') else: print('Value: ', value) break
हम उपयोगकर्ता से इनपुट प्राप्त करते हैं और इसे विभाजित करने के लिए उपयोग करते हैं। 1. हमारे पास दो संभावित अपवाद हैं, एक अमान्य उपयोगकर्ता इनपुट जो कारण होगा मान और एक शून्य (0) जो कारण होगा ZeroDivisionError । हमारे कथन को छोड़कर ये त्रुटियां संभालती हैं।
अब, हम इसके मूल्य का प्रिंट आउट लेना चाहते हैं मूल्य । हमारा अन्य-ब्लॉक यह सुनिश्चित करता है कि यह केवल तभी प्रिंट किया जाता है जब हमारा प्रयास ब्लॉक त्रुटि के बिना निष्पादित होता है। यह महत्वपूर्ण है क्योंकि यदि हमारे प्रयास-ब्लॉक में कोई त्रुटि होती है, तो मूल्य अपरिभाषित हो जाएगा। तो, इसे एक्सेस करने से एक और त्रुटि उत्पन्न होगी।
ऊपर दिए गए कोड को पायथन के साथ चलाएँ
उपरोक्त आउटपुट से पता चलता है कि पहले इनपुट के लिए हमने टाइप किया था ० और ENTER दबाया। चूँकि हमारे भाजक को 0, 1 / भाजक प्राप्त हुआ शून्यविकास । हमारा दूसरा इनपुट k था जो कि अमान्य है पूर्णांक (), इसलिए अपवाद मान उठाया है।
लेकिन हमारा अंतिम इनपुट 9 था जो मान्य है और परिणामस्वरूप, हमें ' मूल्य “0.1111111111111111 के रूप में मुद्रित
अंत में स्टेटमेंट आजमाएं
यह भी ए वैकल्पिक सुविधा अपवाद से निपटने और हमेशा अपवाद हैंडलर में क्या होता है कोई फर्क नहीं पड़ेगा।
अर्थात्:
- कोई अपवाद होता है या नहीं
- भले ही अन्य ब्लॉकों में ‘रिटर्न’ कहा जाता है।
- भले ही स्क्रिप्ट अन्य ब्लॉकों में छोड़ दी जाए
इसलिए, अगर हमारे पास एक कोड है जिसे हम सभी स्थितियों में चलाना चाहते हैं, तो आखिरकार हमारा आदमी है। इस ब्लॉक को ज्यादातर क्लोज-अप के लिए इस्तेमाल किया जाता है जैसे क्लोजिंग फाइल।
नीचे दिए गए उदाहरण पायथन कोड पर विचार करें
def readFile(file_path): try: openFile = open(file_path,'r') # Open a file as read-only print(openFile.readline()) # Read first line of file content except FileNotFoundError as ex: print(ex) finally: print('Cleaning...') openFile.close() if __name__ == '__main__': filePath = './text.txt' readFile(filePath)
यह कोड अपनी मौजूदा निर्देशिका में फ़ाइल text.txt को खोलने और पढ़ने की कोशिश करता है। यदि फ़ाइल मौजूद है, तो हमारा प्रोग्राम फ़ाइल की पहली पंक्ति को प्रिंट करेगा, फिर हमारा अंत-ब्लॉक चलेगा और फ़ाइल को बंद कर देगा।
मान लें कि हमारे पास निर्देशिका में text.txt नामक एक फ़ाइल है जहां यह प्रोग्राम फ़ाइल है और इसमें हैलो शामिल है। यदि हम प्रोग्राम चलाते हैं, तो हमारा आउटपुट होगा
यह उदाहरण जानबूझकर चुना गया था क्योंकि मैं चाहता था कि हम एक छोटी सी समस्या का समाधान करें जो आखिरकार ब्लॉक में फाइल बंद करते समय हो सकती है।
यदि फ़ाइल मौजूद नहीं है, तो अपवाद है FileNotFoundError उठाया जाएगा और चर खुली फाइल परिभाषित नहीं किया जाएगा और एक फ़ाइल ऑब्जेक्ट नहीं होगा। इसलिए, अंत में ब्लॉक में इसे बंद करने की कोशिश एक अपवाद को बढ़ाएगी अनबाउंडलॉकर जो की एक उपवर्ग है NameError ।
यह मूल रूप से कहता है कि हम चर को संदर्भित करने का प्रयास कर रहे हैं खुली फाइल इससे पहले कि यह सौंपा गया है।
अंत में ब्लॉक के अंदर अपवाद हैंडलर का उपयोग करने के लिए एक छोटी चाल है।
def readFile(file_path): try: openFile = open(file_path,'r') # Open a file as read-only print(openFile.readline()) # Read first line of file content except FileNotFoundError as ex: print(ex) finally: try: print('Cleaning...') openFile.close() except: # catches all exceptions pass # Ignore this error because we don't care. if __name__ == '__main__': filePath = './text.txt' readFile(filePath)
यदि हमारी कोशिश ब्लॉक FileNotFoundError को बढ़ाती है, तो हमारे पास निम्नलिखित आउटपुट होंगे
अपवाद उठाएं
पायथन अपवादों के बारे में एक अच्छी खबर यह है कि हम जानबूझकर उन्हें बढ़ा सकते हैं। अपवाद के साथ उठाया जाता है बयान देना ।
उठाना कथन में निम्नलिखित सिंटैक्स है:
raise (ExceptionName((*args: Object)))
एक टर्मिनल खोलें और किसी भी अपवाद ऑब्जेक्ट को ऊपर से उठाएं इन-बिल्ट अपवाद। उदाहरण के लिए, अगर हम ZeroDivisionError बढ़ाएँ:
>>> raise ZeroDivisionError('Can't divide by zero')
हमें ट्रेसबैक मिलेगा:
तो, अपवादों को उठाना क्यों महत्वपूर्ण है?
- जब कस्टम अपवादों के साथ काम करना।
- पवित्रता की जाँच के दौरान।
कस्टम अपवाद क्लासेस
एक कस्टम अपवाद वह है जो आप उन त्रुटियों को संभालने के लिए बनाते हैं जो आपकी आवश्यकता के लिए विशिष्ट हैं। चाल है, हम एक वर्ग को परिभाषित करते हैं जो ऑब्जेक्ट से निकलता है अपवाद , तब हम अपने अपवाद वर्ग को ऊपर उठाने के लिए विवरण का उपयोग करते हैं।
मान लें कि हम उपयोगकर्ता इनपुट की जांच करना चाहते हैं और सुनिश्चित करें कि इनपुट मान नकारात्मक नहीं है (sanity check)। बेशक, हम पायथन अपवाद मान को बढ़ा सकते हैं लेकिन हम इसे विशिष्ट और स्व-व्याख्यात्मक नाम देकर त्रुटि को अनुकूलित करना चाहेंगे InputIsNegativeError । लेकिन यह अपवाद पायथन इन-बिल्ट अपवाद नहीं है।
तो सबसे पहले, हम अपना बेस क्लास बनाते हैं जो एक्सेप्शन से निकलेगा।
class CustomError(Exception): 'Base class exception for all exceptions of this module' pass
फिर हम अपना अपवाद वर्ग बनाते हैं जो आधार वर्ग को विरासत में देगा और हमारी विशिष्ट त्रुटि को हैंडल करेगा।
class InputIsNegativeError(CustomError): '''Raised when User enters a negative value''' pass
इसका परीक्षण करते हैं
try: value = int(input()) if value <0: raise InputIsNegativeError # Raise exception if value is negative except InputIsNegativeError: # catch and handle exception print('Input value shouldn't be negative')
उपर्युक्त कोड उपयोगकर्ता इनपुट के लिए अनुरोध करता है, और जांचें कि क्या यह नकारात्मक है। यदि सही है, तो यह हमारे कस्टम अपवाद InputIsNegativeError को बढ़ाता है जो बाद में अपवाद-कथन में पकड़ा गया है।
नीचे पूरा कोड है:
class CustomError(Exception): 'Base class exception for all exceptions of this module' pass class InputIsNegativeError(CustomError): '''Raised when User enters a negative value''' pass if __name__ == '__main__': try: value = int(input('Input a number: ')) if value <0: raise InputIsNegativeError # Raise exception if value is negative except InputIsNegativeError: # catch and handle exception print('Input value shouldn't be negative')
यदि इनपुट मान -1 जैसी ऋणात्मक संख्या है, तो हमारा आउटपुट होगा:
शुरुआती लोगों के लिए कंप्यूटर प्रोग्राम कैसे बनाएं
इसकी जाँच पड़ताल करो अजगर डॉक अजगर कस्टम अपवादों पर अधिक जानकारी के लिए।
बार बार पूछे जाने वाले प्रश्न
Q # 1) पायथन एक अपवाद को कैसे संभालता है?
उत्तर: अजगर का उपयोग कर अपवादों को संभालता है कोशिश-बयान को छोड़कर । कोड जो एक अपवाद को बढ़ा सकता है, रखा गया है और इसमें निष्पादित किया गया है ब्लॉक करने का प्रयास करें सफ़ेद सिवाय ब्लॉक के कोड है कि अपवाद को संभालती है अगर कोई उठता है।
Q # 2) पायथन में एक अपवाद क्या है?
उत्तर: जब भी पायथन दुभाषिया एक अवैध कोड का सामना करता है, तो यह एक अपवाद को जन्म देता है, जो कि पायथन का अपना तरीका है जो हमें बताता है कि कुछ अप्रत्याशित हुआ है। हम जानबूझकर अपवादों का उपयोग कर सकते हैं बयान देना ।
Q # 3) पायथन कई अपवादों को कैसे संभालता है?
उत्तर: पायथन ब्लॉक को छोड़कर या एकल को छोड़कर एक एकल का उपयोग करके कई अपवादों को संभालता है।
एक एकल ब्लॉक के लिए, अपवादों को टुप के रूप में पारित किया जाता है: के सिवाय (अपवाद 1, अपवाद 2, .., अपवाद) और दाएं से बाएं एक मैच के लिए पायथन की जाँच करता है। इस मामले में, प्रत्येक अपवाद के लिए एक ही कार्रवाई की जाती है।
सभी अपवादों को पकड़ने का एक और तरीका यह है कि अपवाद कीवर्ड के बाद अपवाद का नाम छोड़ दें।
except: # handle all exceptions here
दूसरा तरीका प्रत्येक अपवाद के लिए एक ब्लॉक को छोड़कर उपयोग करना है:
except Exception1: # code to handle Exception1 goes here except Exception2: # code to handle Exception2 goes here except ExceptionN: # code to handle ExceptionN goes here
इस तरह, आप प्रत्येक अपवाद के लिए अलग-अलग कार्रवाई कर सकते हैं।
क्यू # 4) पायथन में अपवाद क्यों महत्वपूर्ण है?
उत्तर: पायथन में अपवादों से निपटने का लाभ यह है कि हम मजबूत, स्वच्छ और त्रुटि मुक्त अनुप्रयोग बना सकते हैं। हम चाहते हैं कि हमारा उत्पादन कोड कुछ त्रुटियों के कारण दुर्घटनाग्रस्त हो जाए, इसलिए हम त्रुटियों को संभालते हैं और अपने आवेदन को चालू रखते हैं।
Q # 5) आप पायथन में एक अपवाद को कैसे अनदेखा करते हैं?
उत्तर: पायथन में एक अपवाद को अनदेखा करने के लिए, का उपयोग करें उत्तीर्ण करना सिवाय ब्लॉक में कीवर्ड। मान लें कि हम मान अपवाद को अनदेखा करना चाहते हैं। हम इसे इस तरह से करेंगे:
except ValueError: pass
जब तक आप नहीं जानते कि आप क्या कर रहे हैं, अपवादों को अनदेखा करना बुरा है। कम से कम, सभी संभावित त्रुटियों के बारे में उपयोगकर्ता को सूचित करें।
निष्कर्ष
इस ट्यूटोरियल में, हमने कवर किया: पायथन एक्सेप्शन, ट्रेसेबैक; कैसे अपवादों को संभालना है प्रयत्न / के सिवाय / अन्य / आखिरकार ब्लॉक, कैसे करें बढ़ाएं अपवाद, और अंत में कैसे हमारे अपने कस्टम अपवाद बनाने के लिए।
पढ़ने के लिए धन्यवाद!
=> स्क्रैच से अजगर जानने के लिए यहां जाएं।
अनुशंसित पाठ
- पायथन ट्यूटोरियल फॉर बिगिनर्स (हैंड्स-ऑन फ्री पायथन ट्रेनिंग)
- पायथन कंट्रोल स्टेटमेंट (पायथन जारी, ब्रेक और पास)
- उदाहरणों के साथ पायथन डेटटाइम ट्यूटोरियल
- पायथन स्ट्रिंग फ़ंक्शंस
- अजगर चर
- कोड उदाहरणों के साथ C # अपवाद हैंडलिंग ट्यूटोरियल
- पूरा गाइड पीएल SQL अपवाद हैंडलिंग उदाहरण के साथ
- उदाहरणों के साथ जावा अपवाद और अपवाद हैंडलिंग