यो ट्युटोरियलले प्रोग्रामिङ उदाहरणहरूको मद्दतले पाइथनमा प्रयोग गरी बाहेक ब्लक प्रयोग गरी अपवाद ह्यान्डलिङको व्याख्या गर्छ:
दुई त्रुटि प्रकारहरूले पाइजोन कार्यक्रमलाई अचानक बन्द गर्न सक्छ अर्थात् सिन्ट्याक्स त्रुटिहरू , र अपवादहरू । यस ट्यूटोरियलमा, हामी धेरै महत्त्वपूर्ण विषयहरू अन्तर्गत दोस्रो त्रुटि प्रकार (अपवादहरू) छलफल गर्नेछौं।
हामीले हाम्रो अनुप्रयोगमा अपवादहरू ह्यान्डल गर्नबाट धेरै लाभ उठाउनेछौं जस्तै:
- एक बलियो अनुप्रयोग सिर्जना गर्दै।
- स्वच्छ र त्रुटिरहित कोड सिर्जना गर्दै।
पाइथन बाहेक प्रयास गर्नुहोस्
एउटा राम्रो समाचार यो हो कि पाइथनसँग हाम्रो कोडमा त्रुटिहरू समात्नका लागि बिल्ट-इन अपवादहरूको राम्रो संख्या छ। साथै, यसले हामीलाई अनुकूलन अपवादहरू सिर्जना गर्ने अवसर दिन्छ जब कुनै पनि निर्मित अपवादहरू हाम्रा आवश्यकताहरू अनुरूप हुँदैनन्।
अपवाद के हो
त्यसोभए पाइथनमा अपवाद के हो? ठीक छ, सरल शब्दहरूमा, जब पाइजोन दोभाषेले अवैध कोड कार्यान्वयन गर्ने प्रयास गर्दछ, यसले एक अपवाद खडा गर्छ, र त्यस्तो अपवादलाई ह्यान्डल नगरिएको अवस्थामा, यसले कार्यक्रमको निर्देशनहरूको सामान्य प्रवाहलाई बाधा पुर्याउँछ र ट्रेसब्याक छाप्छ।
अवैध कोड सिर्जना गरौं र पाइथन अनुवादकले कसरी प्रतिक्रिया दिनेछ भनी हेरौं।
पाइथन शेल खोल्नुहोस् र निम्न कोड चलाउनुहोस्।
>>> 50/0
यो मध्ये एक हो। प्रोग्रामिङमा सबैभन्दा सामान्य त्रुटिहरू। माथिको कोडले नम्बर 50 लाई 0 (शून्य) द्वारा विभाजित गर्ने प्रयास गर्दछ। पाइथनभ्यारीएबल ओपनफाइल यो तोकिएको भन्दा पहिले।
27>
यहाँ एउटा सानो चाल अन्तिम-ब्लक भित्र अपवाद ह्यान्डलरहरू प्रयोग गर्नु हो।
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 Exception
पाइथन अपवादहरूको बारेमा एउटा राम्रो खबर यो हो कि हामी जानाजानी गर्न सक्छौं। तिनीहरूलाई उठाउनुहोस्। अपवादहरू राइज स्टेटमेन्ट सँग उठाइएको छ।
राइज स्टेटमेन्टमा निम्न सिन्ट्याक्स हुन्छ:
raise [ExceptionName[(*args: Object)]]
टर्मिनल खोल्नुहोस् र बाट कुनै अपवाद वस्तु उठाउनुहोस्। पाइथन भित्र निर्मित अपवादहरू। उदाहरणका लागि, यदि हामीले ZeroDivisionError उठायौं:
>>> raise ZeroDivisionError("Can't divide by zero")
हामी ट्रेसब्याक पाउनेछौं:
त्यसोभए, अपवादहरू उठाउनु किन महत्त्वपूर्ण छ?
- अनुकूल अपवादहरूसँग काम गर्दा।
- सेनिटी जाँचको क्रममा।
अनुकूलन अपवाद कक्षाहरू
एक अनुकूलन अपवाद हो जुन तपाइँ तपाइँको आवश्यकता को लागी विशिष्ट त्रुटिहरु लाई ह्यान्डल गर्न को लागी सिर्जना गर्नुहुन्छ। चाल यो हो, हामी वस्तु अपवाद बाट व्युत्पन्न वर्ग परिभाषित गर्छौं, त्यसपछि हामी हाम्रो अपवाद वर्ग उठाउन raise कथन प्रयोग गर्छौं।
मानौं हामी प्रयोगकर्ता इनपुट जाँच गर्न चाहन्छौं र सुनिश्चित गर्न चाहन्छौं। इनपुट मान नकारात्मक छैन (सेनिटी जाँच)। निस्सन्देह, हामीले पाइथन अपवाद ValueError उठाउन सक्छौं तर हामी त्रुटिलाई 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 जस्तै नकारात्मक संख्या हो, त्यसपछि हामीसँग आउटपुट हुनेछ:
पाइथन अनुकूलन अपवादहरूमा थप विवरणहरूको लागि पाइथन कागजात जाँच गर्नुहोस्।
बारम्बार सोधिने प्रश्नहरू
प्रश्न #1) पाइथनले अपवादलाई कसरी ह्यान्डल गर्छ?
उत्तर: पाइथनले प्रयोग गरेर अपवादहरू ह्यान्डल गर्छ प्रयास-बाहेक कथन । अपवाद उठाउन सक्ने कोडलाई ब्लक प्रयास गर्नुहोस् मा राखिन्छ र कार्यान्वयन गरिन्छ जबकि ब्लक बाहेक ले कोड होल्ड गर्दछ जसले कुनै पनि उत्पन्न भएमा अपवादहरूलाई ह्यान्डल गर्नेछ।
प्रश्न #2) पाइथनमा अपवाद के कुरा उठाउँदैछ?
उत्तर: जब पाइजोन इन्टरप्रिटरले अमान्य कोडको सामना गर्छ, यसले अपवाद खडा गर्छ, जुन पाइथनको आफ्नै तरिका हो। केहि अप्रत्याशित भयो भनेर हामीलाई बताउन। हामी जानाजानी राइज स्टेटमेन्ट प्रयोग गरेर अपवादहरू उठाउन सक्छौं।
प्र #3) पाइथनले धेरै अपवादहरू कसरी ह्यान्डल गर्छ?
उत्तर: पाइथनले धेरै अपवादहरू ह्यान्डल गर्दछब्लक बाहेक एकल बाहेक वा धेरै ब्लकहरू प्रयोग गरेर।
एउटा ब्लकका लागि, अपवादहरू टपलको रूपमा पास हुन्छन्: बाहेक (अपवाद1, अपवाद2,..,ExceptionN) र पाइथन जाँचहरू दायाँ देखि बायाँ एक खेल को लागी। यस अवस्थामा, प्रत्येक अपवादको लागि समान कार्य लिइन्छ।
सबै अपवादहरू समात्ने अर्को तरिका अपवादको नाम बाहेक किवर्ड पछि छोड्नु हो।
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) पाइथनमा अपवाद ह्यान्डलिङ किन महत्त्वपूर्ण छ?
उत्तर: पाइथनमा अपवादहरू ह्यान्डल गर्ने फाइदा भनेको हामीले बलियो, सफा र त्रुटि-रहित अनुप्रयोगहरू सिर्जना गर्न सक्छौं। हामी हाम्रो उत्पादन कोड केही त्रुटिहरूको कारण क्र्यास भएको चाहँदैनौं, त्यसैले हामी त्रुटिहरू ह्यान्डल गर्छौं र हाम्रो अनुप्रयोगलाई निरन्तरता दिन्छौं।
प्रश्न # 5) तपाईं पाइथनमा भएको अपवादलाई कसरी बेवास्ता गर्नुहुन्छ?
उत्तर: पाइथनमा अपवाद बेवास्ता गर्न, ब्लक बाहेक पास कुञ्जी शब्द प्रयोग गर्नुहोस्। मानौं हामी ValueError अपवाद बेवास्ता गर्न चाहन्छौं। हामी यसलाई यसरी गर्नेछौं:
except ValueError: pass
तपाईंले के गर्दै हुनुहुन्छ भन्ने थाहा नभएसम्म, अपवादहरूलाई बेवास्ता गर्नु नराम्रो अभ्यास हो। कम्तिमा, प्रयोगकर्तालाई सबै सम्भावित त्रुटिहरूको बारेमा जानकारी गराउनुहोस्।
निष्कर्ष
यस ट्युटोरियलमा, हामीले समावेश गरेका छौं: पाइथन अपवादहरू, ट्रेसब्याक; प्रयास गर्नुहोस् / बाहेक / अन्य / अन्तमा सँग अपवादहरू कसरी ह्यान्डल गर्नेब्लकहरू, कसरी उठाउनुहोस् अपवादहरू, र अन्तमा कसरी हाम्रो आफ्नै अनुकूलन अपवादहरू सिर्जना गर्ने।
पढ्नु भएकोमा धन्यवाद!
दोभाषेले यसलाई अवैध अपरेशनको रूपमा हेर्छ र ZeroDivisionErrorउठाउँछ, कार्यक्रमलाई अवरोध गर्छ, र ट्रेसब्याक छाप्छ।15>
हामी स्पष्ट रूपमा देख्न सक्छौं कि ZeroDivisionError उठाइएको अपवाद हो। यो वास्तवमा पाइथनको आफ्नै तरिका हो जुन हामीलाई बताउन सक्छ कि यो शून्य द्वारा अंक विभाजित गर्न राम्रो छैन। यद्यपि JavaScript जस्तै अन्य भाषाहरूमा, यो त्रुटि होइन; र पाइथनले यस अभ्यासलाई कडाइका साथ निषेध गर्दछ।
साथै, यो केवल एक अपवाद वस्तु हो र पाइथनमा त्यस्ता धेरै वस्तुहरू इन-बिल्ट छन् भनेर जान्न महत्त्वपूर्ण छ। सबै पाइथन बिल्ट-इन अपवादहरू हेर्नको लागि यो पाइथन आधिकारिक कागजातहरू हेर्नुहोस्।
ट्रेसब्याक बुझ्ने
हामी अपवादहरू ह्यान्डल गर्न अघि, मलाई लाग्छ कि यसले अपवादहरू भएमा के हुन्छ भनेर बुझ्न मद्दत गर्नेछ। ह्यान्डल गरिएको छैन र पाइथनले हाम्रो त्रुटिको बारेमा हामीलाई सूचित गर्न कसरी सक्दो गर्छ।
जब पाइजोनले त्रुटिको सामना गर्छ, यसले अपवाद खडा गर्छ। यदि यो अपवाद ह्यान्डल गरिएन भने, यसले ट्रेसब्याक भनिने केहि जानकारी उत्पादन गर्दछ। त्यसोभए, यो ट्रेसब्याकले कुन जानकारी समावेश गर्दछ?
यसमा समावेश छ:
- त्रुटि सन्देश जसले हामीलाई कुन अपवाद उठाइएको थियो र यो अपवाद हुनु अघि के भयो भनेर बताउँछ। उठाइयो।
- कोडको विभिन्न लाइन नम्बरहरू जसले यो त्रुटि उत्पन्न गर्यो। कल स्ट्याक जसलाई हामी पछि यहाँ छलफल गर्नेछौं।
यद्यपि यो एउटा त्रुटि हो।थोरै भ्रमपूर्ण, हामी अर्को उदाहरणले हाम्रो बुझाइमा थप उज्यालो ल्याउने वाचा गर्छौं।
माथिको ५० द्वारा ० विभाजित गरेर छापिएको ट्रेसब्याकलाई सम्झनुहोस्, हामीले ट्रेसब्याकले निम्न जानकारी समावेश गरेको देख्न सक्छौं:
- फाइल "": यसले हामीलाई यो कोड कन्सोल टर्मिनलबाट चलाइएको बताउँछ।
- लाइन १: यसले हामीलाई यो लाइन नम्बरमा त्रुटि भएको बताउँछ।
- ZeroDivisionError: devision by zero: यसले हामीलाई बताउँछ कि के अपवाद उठाइयो र के कारणले भयो।
अर्को उदाहरण प्रयास गरौं र सायद कल स्ट्याक कस्तो देखिन्छ हेर्नुहोस्। एउटा सम्पादक खोल्नुहोस्, तलको कोड प्रविष्ट गर्नुहोस् र tracebackExp .py
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
तपाईले निम्न ट्रेसब्याक देख्नुहुनेछ:
माथिको ट्रेसब्याक भ्रामक लाग्न सक्छ तर वास्तवमा, यो होइन। Pythonistas ट्रेसब्याक पढ्नको लागि उत्तम तरिकाको साथ आए, जुन तल माथि बाट हो। त्यसोभए, यो ट्रेसब्याकले के प्रस्ताव गर्दछ भनेर बुझ्न यो बुद्धि प्रयोग गरौं।
- तल्लो तहमा, हामीले उठाइएको अपवाद र किन उठाइयो।
- माथि सार्दै, हामीले फाइल नाम tracebackExp .py प्राप्त गर्छौं जहाँ यो त्रुटि देखा पर्यो, गणना जसले यो त्रुटि उत्पन्न गर्यो compute = numb/div, प्रकार्य stack2, र लिङ्क नम्बर लाइन 6 जहाँ यो गणना गरिएको थियो। .
- माथि सर्दै, हामी हाम्रो stack2 प्रकार्य देख्छौंलाइन नम्बर 3 मा प्रकार्य stack1 मा बोलाइएको थियो।
- शीर्षमा सर्दै, हामी देख्छौं कि प्रकार्य stack1 लाई लाइन नम्बर 11 मा कल गरिएको थियो। module > हामीलाई बताउँछ कि यो कार्यान्वयन भइरहेको फाइल हो।
सामान्य पाइथन अपवादहरू
पाइथन पुस्तकालयले निर्मित अपवादहरूको भयानक धेरै परिभाषित गर्दछ। तपाईंले पाइथन डकुमेन्टेसन जाँच गर्न सक्नुहुन्छ वा बिल्ट-इन स्थानीय () प्रकार्यलाई तलको रूपमा कल गर्न सक्नुहुन्छ:
>>> dir(locals()['__builtins__'])
हामी यी सबै अपवादहरूलाई सम्बोधन गर्ने प्रयास गर्दैनौं, तर हामी केही सामान्य अपवादहरू देख्नेछौं। जुन तपाईंले सम्भवतः भेट्नुहुनेछ।
#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()
हामी प्रयोगकर्ताबाट लाभांश र भाजकको मूल्य अनुरोध गर्छौं, तर हामीले भाजकको स्ट्रिङ कास्ट गर्न बिर्सन्छौं। एक पूर्णांक मा मान। त्यसोभए, हामी लाभांशको प्रकार integer ( int ) र भाजकको प्रकार string ( str ) सँग अन्त्य गर्छौं। त्यसपछि हामीले TypeError पाउँछौं किनकि डिभिजन अपरेटर (/) स्ट्रिङमा काम गर्दैन।
तपाईलाई यो जान्न चासो लाग्न सक्छ कि पाइथनको विपरीत, जाभास्क्रिप्टमा प्रकार जबरजस्ती छ जसले मूल रूपमा अपरेन्डको प्रकारहरू मध्ये एकलाई अर्को अपरेन्डको प्रकारको बराबर मानमा रूपान्तरण गर्दछ जब अपरेन्डहरू हुन्छन्।विभिन्न प्रकारहरू।
#2) ValueError
यो उठाइएको छ जब कुनै अपरेशन वा प्रकार्यले सही प्रकारको तर अनुपयुक्त मान भएको तर्क प्राप्त गर्दछ।
उदाहरण 2
माथिको उदाहरण 1 मा हाम्रो कार्यक्रमलाई विचार गर्नुहोस्।
यदि प्रयोगकर्ताले '3a' जस्तै लाभांशको लागि अल्फान्यूमेरिक मान इनपुट गर्छ भने, हाम्रो कार्यक्रमले वृद्धि गर्नेछ। ValueError अपवाद। यो किनभने, पाइथन int() विधिले कुनै पनि संख्या वा स्ट्रिङ लिन्छ र पूर्णांक वस्तु फर्काउँछ, स्ट्रिङ मानमा अक्षर वा कुनै गैर-संख्यात्मक मान हुनु हुँदैन।
#3) AttributeError
अवस्थित नभएको एट्रिब्यूट असाइन गर्दा वा सन्दर्भ गर्दा यो अपवाद उठाइएको हो।
उदाहरण ३
कार्यक्रमलाई विचार गर्नुहोस्। तल। यसले संख्या लिन्छ र पाइथन गणित मोड्युल प्रयोग गरेर यसको वर्गमूल गणना गर्दछ
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 टाइप गर्यौं जुन गणित मोड्युलमा अवस्थित छैन।
त्यसोभए, हामीले एउटा विशेषता sqr सन्दर्भ गर्ने प्रयास गरिरहेका थियौं जुन अवस्थित छैन र नेतृत्व गर्यो। अपवाद विशेषता त्रुटि उठाइएको छ। हामी मध्ये धेरैले यस्तो गल्ती धेरै गर्छौं। त्यसोभए, तपाईं एक्लै हुनुहुन्न।
अपवादहरू प्रयोग गरेर प्रयास गर्नुहोस्
एक प्रोग्रामरको रूपमा, एउटा कुरा जुन हामीमध्ये धेरैले हाम्रो समय खर्च गर्नेछौं त्यो भनेको एउटा बलियो कोड लेख्नु हो।लचिलो। कोड जुन केही त्रुटिहरूको कारणले तोड्दैन। पाइथनमा, हामी हाम्रा कथनहरूलाई प्रयास – बाहेक कथन भित्र संलग्न गरेर यो प्राप्त गर्न सक्छौं।
पाइथन प्रयास-बाहेक कथन
प्रयास-बाहेक कथनको निम्न संरचना छ:
try: #your code goes here except """Specify exception type(s) here""": #handle exception here
कोडलाई tracebackExp .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 मा कोड कार्यान्वयन गर्दछ। यदि कुनै अवैध कोड फेला परेन भने, ब्लक बाहेकको कोड लाइन १० छोडिन्छ र कार्यान्वयन जारी रहन्छ।
तर, यदि अमान्य कोड फेला पर्यो भने, कार्यान्वयन तुरुन्तै रोकिन्छ। अवरुद्ध प्रयास गर्नुहोस् र जाँच गर्नुहोस् कि अपवाद उठाएको हामीले अपवाद कथन लाइन 9 मा उपलब्ध गराएकोसँग मेल खान्छ। यदि यो मेल खान्छ भने, बाहेक ब्लक कार्यान्वयन हुन्छ र जारी रहन्छ। यदि त्यसो भएन भने, कार्यक्रमले अवरोध गर्नेछ।
प्रयास-ब्लकले सामान्यतया कोड समावेश गर्दछ जसले अपवाद उठाउन सक्छ जबकि अपवाद-ब्लकले अपवादलाई समात्छ र ह्यान्डल गर्दछ।
एकाधिक ह्यान्डलिंग अपवादहरू बाहेक
हामी एकल "बाहेक" वा धेरै "बाहेक" संग धेरै अपवादहरू ह्यान्डल गर्न सक्छौं। यो सबै तपाईले प्रत्येक अपवादलाई कसरी ह्यान्डल गर्न चाहनुहुन्छ भन्नेमा निर्भर गर्दछ।
#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 र IndexError । यदि यी अपवादहरू मध्ये कुनै पनि उठाइएको छ भने, अपवाद ब्लक कार्यान्वयन गरिनेछ।
माथिको कोडमा, idx=3, त्यसैले idx_ value ० र value बन्छ। /idx_ value ले 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 , त्यसैले arr[idx ] ले IndexError उठाउनेछ किनभने idx सूचीको लम्बाइभन्दा ठूलो छ arr
साथै, तपाइँको आवेदन द्वारा उठाएको अपवाद के हो भनेर निश्चित छैन कार्यान्वयन जारी राख्न कहिल्यै सुरक्षित छैन। त्यसकारण हामीसँग कुनै पनि अप्रत्याशित अपवादहरू समात्न अपवाद प्रकार छ। त्यसपछि, हामी सूचित गर्छौंप्रयोगकर्ता र एउटै अपवाद उठाएर अनुप्रयोगलाई अवरोध गर्नुहोस्।
अर्को कथन प्रयास गर्नुहोस्
यो अपवाद ह्यान्डलिङको वैकल्पिक सुविधा हो र तपाईंले चाहेको कोड थप्न अनुमति दिन्छ। कुनै त्रुटि नभएको बेला चलाउनुहोस्। यदि त्रुटि भयो भने, यो else-ब्लक चल्ने छैन।
तलको पाइथन कोडको उदाहरणलाई विचार गर्नुहोस्, आफ्नो सम्पादक खोल्नुहोस् र code को elseTry.py
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) break0 को रूपमा बचत गर्नुहोस्।>हामीले प्रयोगकर्ताबाट इनपुट पाउँछौं र यसलाई १ विभाजन गर्न प्रयोग गर्छौं। हामीसँग यहाँ दुई सम्भावित अपवादहरू छन्, एउटा अमान्य प्रयोगकर्ता इनपुट जसले ValueErrorर zero(0)निम्त्याउनेछ। Zero DivisionError। हाम्रो बाहेक स्टेटमेन्टले यी त्रुटिहरूलाई ह्यान्डल गर्छ।
अब, हामी value को मान छाप्न चाहन्छौं। हाम्रो अर्को-ब्लकले हाम्रो प्रयास ब्लक त्रुटि बिना कार्यान्वयन भएमा मात्र प्रिन्ट भएको सुनिश्चित गर्दछ। यो महत्त्वपूर्ण छ किनभने यदि हाम्रो प्रयास-ब्लकमा त्रुटि देखा पर्यो भने, मान अपरिभाषित हुनेछ। त्यसकारण, यसलाई पहुँच गर्दा अर्को त्रुटि हुनेछ।
माथिको कोडलाई Python elseTry.py
माथिको आउटपुटले देखाउँछ। पहिलो इनपुटको लागि, हामीले 0 टाइप गर्यौं र ENTER थिच्यौं। हाम्रो भाजकले ० प्राप्त गरेको हुनाले, १/भाजकले zeroDivisionError उठायो। हाम्रो दोस्रो इनपुट k थियो जुन int () को लागि अमान्य छ, त्यसैले अपवाद ValueError उठाइएको छ।
तर हाम्रो अन्तिम इनपुट 9 थियो जुन मान्य छ र a को रूपमा। नतिजा, हामीले " value " को मान पायौं ०.१११११११११११११११११११
अन्तमा प्रयास गर्नुहोस्कथन
यो अपवाद ह्यान्डलिङको वैकल्पिक सुविधा पनि हो र अपवाद ह्यान्डलरहरूमा जे भए पनि सधैं चल्नेछ।
त्यो हो:
- अपवाद हुन्छ वा हुँदैन
- अन्य ब्लकहरूमा 'रिटर्न' बोलाइएको भए पनि।
- अन्य ब्लकहरूमा स्क्रिप्ट छोडे पनि
त्यसोभए, यदि हामीसँग कोड छ जुन हामी सबै परिस्थितिहरूमा चलाउन चाहन्छौं, अन्तमा-ब्लक हाम्रो मान्छे हो। यो ब्लक प्रायः फाइलहरू बन्द गर्ने जस्ता क्लिन-अपहरूका लागि प्रयोग गरिन्छ।
तलको पाइथन कोडको उदाहरणलाई विचार गर्नुहोस्
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 उठाइनेछ र चल openFile परिभाषित गरिने छैन र फाइल हुनेछैन। वस्तु। त्यसकारण, यसलाई अन्तिम-ब्लकमा बन्द गर्ने प्रयास गर्दा एउटा अपवाद UnboundLocalError उठ्नेछ जुन NameError को उपवर्ग हो।
यसले मूलतया भन्छ कि हामी सन्दर्भ गर्न खोजिरहेका छौं। द