Errors और exceptions अप्रत्याशित व्यवहार का कारण बन सकते हैं या प्रोग्राम को चलने से ही रोक सकते हैं। Python इन समस्याओं को संभालने और कोड की मजबूती बढ़ाने के लिए कई फ़ंक्शंस और तंत्र प्रदान करता है। इस ट्यूटोरियल में, हम विभिन्न error प्रकारों और built-in फ़ंक्शंस के बारे में उदाहरणों सहित सीखेंगे।
एक error कोड में एक गंभीर समस्या है, जिससे आम तौर पर रनटाइम पर उबरा नहीं जा सकता, जैसे गलत सिंटैक्स या गलत इंडेंटेशन।
एक exception रनटाइम पर होने वाली घटना है जो सामान्य प्रोग्राम फ्लो को बाधित करती है, पर उसे पकड़ा और संभाला जा सकता है जिससे प्रोग्राम चलना जारी रखता है।
जहाँ exceptions रनटाइम पर होते हैं, वहीं कुछ errors जैसे SyntaxError और IndentationError प्रोग्राम चलने से पहले ही parser द्वारा पकड़ लिए जाते हैं।
सरल शब्दों में, error एक गंभीर मुद्दा है जिसे सामान्य एप्लिकेशन द्वारा नहीं पकड़ना चाहिए, जबकि exception एक ऐसी स्थिति है जिसे प्रोग्राम को पकड़ना चाहिए।
विभिन्न उदाहरणों को देखकर errors और exceptions के बारे में और जानें। इन्हें आसानी से चलाने के लिए, आप मुफ़्त में एक DataLab workbook बनाएँ जिसमें Python पहले से इंस्टॉल है और सभी कोड सैंपल शामिल हैं।
Python में Errors
यहाँ एक सिंटैक्स एरर का उदाहरण है जहाँ फ़ंक्शन के बाहर return का कोई मतलब नहीं। हमें प्रोग्राम में errors को हैंडल नहीं करना चाहिए। इसके बजाय, हमें ऐसा फ़ंक्शन बनाना चाहिए जो स्ट्रिंग लौटाए।
Input In [1]return"DataCamp"^
SyntaxError:'return' outside function
संचालित द्वारा
हमने फ़ंक्शन बनाया है, लेकिन गलत इंडेंटेशन के साथ। रनटाइम पर इंडेंटेशन एरर हैंडल नहीं करना चाहिए। इसे मैन्युअली ठीक करें या कोड फ़ॉर्मेटिंग टूल्स का उपयोग करें।
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
Input In [4],in<cell line:1>()---->1 test =1/0
ZeroDivisionError: division by zeroसंचालित द्वारा
NameError exceptions काफ़ी आम हैं, जहाँ कोई वेरिएबल नहीं मिलता। हम इसे वेरिएबल बदलकर या चेतावनी प्रिंट करके भी संभाल सकते हैं।
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [5],in<cell line:1>()---->1 y = test
NameError
संचालित द्वारा
Python की Built-in Exceptions
यहाँ डिफ़ॉल्ट Python exceptions की सूची उनके विवरण सहित दी गई है:
AssertionError: तब उठती है जब assert स्टेटमेंट असफल हो।
EOFError: तब उठती है जब input() फ़ंक्शन end-of-file स्थिति से मिलता है।
AttributeError: तब उठती है जब किसी attribute का असाइनमेंट या reference असफल हो।
TabError: तब उठती है जब इंडेंटेशन असंगत tabs या spaces से बना हो।
ImportError: तब उठती है जब मॉड्यूल को import करना असफल हो।
IndexError: तब होती है जब किसी sequence का index सीमा से बाहर हो।
KeyboardInterrupt: तब उठती है जब उपयोगकर्ता interrupt keys (Ctrl + C या Delete) दबाता है।
RuntimeError: तब होती है जब error किसी भी श्रेणी में फिट नहीं बैठती।
NameError: तब उठती है जब कोई वेरिएबल local या global scope में नहीं मिलता।
MemoryError: तब उठती है जब प्रोग्राम की मेमोरी समाप्त हो जाए।
ValueError: तब होती है जब ऑपरेशन या फ़ंक्शन को सही प्रकार का, पर गलत मान वाला argument मिले।
ZeroDivisionError: तब उठती है जब आप किसी मान या वेरिएबल को शून्य से विभाजित करें।
SyntaxError: तब parser द्वारा उठाई जाती है जब Python सिंटैक्स गलत हो।
IndentationError: तब होती है जब इंडेंटेशन गलत हो।
SystemError: तब उठती है जब इंटरप्रेटर कोई आंतरिक error पहचानता है।
Python में errors और exceptions की पूरी सूची आप दस्तावेज़ पढ़कर पा सकते हैं।
हमारा Object-Oriented Programming in Python कोर्स लेकर Python exceptions के बारे में जानें। यह आपको क्लासेज़ बनाना और इनहरिटेंस व पोलिमॉर्फ़िज़्म का उपयोग कर कोड को पुन: प्रयोग और अनुकूलित करना सिखाएगा।
try, except, else, और finally के साथ Exception Handling
errors और exceptions के बारे में जानने के बाद, अब हम try, except, else, और finally ब्लॉक का उपयोग करके उन्हें हैंडल करना सीखेंगे।
तो, उन्हें हैंडल करने से हमारा मतलब क्या है? सामान्य स्थिति में, ये errors कोड निष्पादन को रोक देंगी और error संदेश दिखाएँगी। स्थिर सिस्टम बनाने के लिए, हमें इन errors का अनुमान लगाना होता है और वैकल्पिक समाधान या चेतावनी संदेश प्रस्तुत करने होते हैं।
इस खंड में, हम सीखेंगे कि हर ब्लॉक क्या करता है और हम उन्हें मजबूत कोड लिखने के लिए कैसे उपयोग कर सकते हैं।
The try and except statement
Python में exceptions को संभालने का सबसे सरल तरीका try और except ब्लॉक का उपयोग करना है।
try स्टेटमेंट के अंतर्गत कोड चलाएँ।
जब कोई exception उठे, तो except स्टेटमेंट के अंतर्गत कोड चलाएँ।
error या exception पर रुकने के बजाय, हमारा कोड वैकल्पिक समाधानों की ओर बढ़ेगा।
सरल उदाहरण
पहले उदाहरण में, हम अपरिभाषित x वेरिएबल को प्रिंट करने की कोशिश करेंगे। सामान्य स्थिति में, इसे error फेंकनी चाहिए और निष्पादन रोक देना चाहिए, पर try और except ब्लॉक के साथ, हम फ्लो का व्यवहार बदल सकते हैं।
प्रोग्राम try स्टेटमेंट के अंतर्गत कोड चलाएगा।
जैसा कि हमें पता है, x परिभाषित नहीं है, तो यह except स्टेटमेंट चलाएगा और चेतावनी प्रिंट करेगा।
try:print(x)except:print("An exception has occurred!")संचालित द्वारा
दूसरे उदाहरण में, हम कई प्रकार के exceptions को संभालने के लिए एक से अधिक except स्टेटमेंट का उपयोग करेंगे।
यदि ZeroDivisionError exception उठती है, तो प्रोग्राम "You cannot divide a value with zero." प्रिंट करेगा।
बाकी exceptions के लिए “Something else went wrong.” प्रिंट होगा।
यह हमें लचीला कोड लिखने देता है जो कई exceptions को एक साथ हैंडल कर सके बिना टूटे।
नोट: बिना exception प्रकार बताए एक खाली except: क्लॉज़ का उपयोग करने से बचें — यह सब कुछ पकड़ता है, जिसमें KeyboardInterrupt और SystemExit भी शामिल हैं, जिससे आपका प्रोग्राम बंद करना असंभव हो सकता है और असंबंधित बग छिप सकते हैं। हमेशा अपेक्षित विशेष exception को पकड़ें, जैसे except ZeroDivisionError:।
try:print(1/0)except ZeroDivisionError:print("You cannot divide a value with zero")except:print("Something else went wrong")संचालित द्वारा
नीचे दिए गए कोड में, हम CSV फ़ाइल पढ़ रहे हैं, और जब FileNotFoundError exception उठती है, तो कोड error और data.csv फ़ाइल के बारे में एक अतिरिक्त संदेश प्रिंट करेगा।
हाँ, हम डिफ़ॉल्ट error संदेश प्रिंट कर सकते हैं बिना निष्पादन तोड़े।
try:withopen('data.csv')asfile:
read_data =file.read()except FileNotFoundError as fnf_error:print(fnf_error)print("Explanation: We cannot load the 'data.csv' file")संचालित द्वारा
[Errno 2] No such fileor directory:'data.csv'
Explanation: We cannot load the 'data.csv'fileसंचालित द्वारा
else क्लॉज़ के साथ try
हमने try और except के बारे में सीखा है, और अब हम else स्टेटमेंट के बारे में सीखेंगे।
जब try स्टेटमेंट कोई exception नहीं उठाता, तो कोड else ब्लॉक में जाता है। यह तब का उपाय या fallback विकल्प है जब आपको उम्मीद हो कि आपकी स्क्रिप्ट का कोई भाग exception पैदा कर सकता है। इसे आम तौर पर एक संक्षिप्त सेटअप या सत्यापन खंड में उपयोग किया जाता है जहाँ आप नहीं चाहते कि कुछ errors छिप जाएँ।
नोट: try-except ब्लॉक में, आप else को सभी except स्टेटमेंट्स के बाद उपयोग कर सकते हैं।
सरल उदाहरण
हम ZeroDivisionError उदाहरण में else स्टेटमेंट जोड़ रहे हैं। जैसा कि दिखता है, जब कोई exception नहीं उठती, तो else स्टेटमेंट के अंतर्गत प्रिंट फ़ंक्शन चलता है और परिणाम दिखाता है।
try:
result =1/3except ZeroDivisionError as err:print(err)else:print(f"Your answer is {result}")संचालित द्वारा
आइए एक सरल फ़ंक्शन बनाकर और विभिन्न परिदृश्यों के लिए परीक्षण करके और जानें।
find_nth_value() फ़ंक्शन में x (लिस्ट) और n (इंडेक्स नंबर) argument हैं। हमने IndexError exception को संभालने के लिए try, except, और else ब्लॉक बनाए हैं।
x =[5,8,9,13]deffind_nth_value(x,n):try:
result = x[n]except IndexError as err:print(err)else:print("Your answer is ", result)संचालित द्वारा
लिस्ट x में चार मान हैं, और हम उन्हें 6वें और 2रे इंडेक्स के लिए टेस्ट करेंगे।
# Testing
find_nth_value(x,6)
find_nth_value(x,2)संचालित द्वारा
n=6 पर, IndexError exception उठी, और हमें डिफ़ॉल्ट error संदेश “list index out of range.” दिखा।
n=2 पर, कोई exception नहीं उठी, और फ़ंक्शन ने else स्टेटमेंट के अंतर्गत परिणाम प्रिंट किया।
try-except ब्लॉक में finally कीवर्ड हमेशा चलता है, चाहे exception हो या न हो। finally ब्लॉक हमेशा try, except, और else के बाद ही चलता है, चाहे exception उठी हो या पकड़ी गई हो। यह संसाधन साफ़ करने और ऑब्जेक्ट बंद करने में बहुत उपयोगी है, विशेषकर फ़ाइलें बंद करने में।
divide फ़ंक्शन ZeroDivisionError exceptions को संभालने और बिना exception के परिणाम दिखाने के लिए बनाया गया है। चाहे नतीजा कुछ भी हो, यह हमेशा finally चलाकर हरे रंग में “Code by DataCamp” प्रिंट करेगा।
defdivide(x,y):try:
result = x/y
except ZeroDivisionError:print("Please change 'y' argument to non-zero value")except:print("Something went wrong")else:print(f"Your answer is {result}")finally:print("\033[92m Code by DataCamp\033[00m")संचालित द्वारा
पहले टेस्ट में, हम 1 को 0 से बाँट रहे हैं, जिसे ZeroDivisionError exception उठनी चाहिए और संदेश प्रिंट होना चाहिए। जैसा कि हम देखते हैं, error संदेश के बाद एक अतिरिक्त पंक्ति है।
तीनों परिदृश्यों में एक बात समान है। कोड हमेशा finally स्टेटमेंट के अंतर्गत प्रिंट फ़ंक्शन चलाता है।
यदि आप Python में नए हैं और एक वास्तविक प्रोग्रामर की तरह कोड करना चाहते हैं, तो हमारा Python Programming स्किल ट्रैक आज़माएँ। आप कुशल कोड, Python फ़ंक्शंस, सॉफ़्टवेयर इंजीनियरिंग, यूनिट टेस्टिंग, और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग सीखेंगे।
Python में Nested Exception Handling
हमें nested exception handling तब चाहिए जब हम प्रोग्राम को क्रम में कई exceptions संभालने के लिए तैयार कर रहे हों। उदाहरण के लिए, हम else स्टेटमेंट के अंतर्गत एक और try-except ब्लॉक जोड़ सकते हैं। तो, यदि पहला स्टेटमेंट exception नहीं उठाता, तो दूसरे स्टेटमेंट और कोड के बाकी हिस्से को जाँचें।
divide फ़ंक्शन में बदलाव
हमने पिछले उदाहरण के divide फ़ंक्शन में बदलाव किए हैं और else स्टेटमेंट के अंतर्गत nested try-except ब्लॉक जोड़ा है। यानी, यदि AttributeError नहीं है, तो यह else चलाएगा और नए कोड को ZeroDivisionError exception के लिए जाँचेगा।
defdivide(x,y):try:
value =50
x.append(value)except AttributeError as atr_err:print(atr_err)else:try:
result =[i / y for i in x]print( result )except ZeroDivisionError:print("Please change 'y' argument to non-zero value")finally:print("\033[92m Code by DataCamp\033[00m")संचालित द्वारा
पहले परिदृश्य में, हम चार मानों की लिस्ट x और हर के रूप में 3 दे रहे हैं। स्क्रिप्ट लिस्ट में 50 जोड़ेगी, लिस्ट के प्रत्येक मान को 3 से विभाजित करेगी, और परिणाम दिखाएगी।
Please change 'y' argument to non-zero value
Code by DataCampसंचालित द्वारा
फ़ाइल एडिटिंग का उदाहरण
आइए फ़ाइल लोड करने, टेक्स्ट लिखने और फ़ाइल बंद करने के कुछ और व्यावहारिक उदाहरण देखें।
file_editor() फ़ंक्शन यह करेगा:
open() फ़ंक्शन के लिए FileNotFoundError exception जाँचेगा।
यदि बाहरी exception नहीं उठती, तो write() फ़ंक्शन की exception जाँची जाएगी।
जो भी हो, फ़ाइल खुलने के बाद, finally स्टेटमेंट चलाकर फ़ाइल को बंद किया जाएगा।
यदि बाहरी try स्टेटमेंट exception उठाए, तो यह अमान्य फ़ाइल पथ के साथ error संदेश लौटाएगा।
deffile_editor(path,text):try:
data =open(path)try:
data.write(text)except:print("Unable to write the data. Please add an append: 'a' or write: 'w' parameter to the open() function.")finally:
data.close()except:print(f"{path} file is not found!!")संचालित द्वारा
पहले परिदृश्य में, हम फ़ाइल पथ और टेक्स्ट देते हैं।
path ="data.txt"
text ="DataLab: Share your data analysis in a cloud-based environment--no installation required."
file_editor(path,text)संचालित द्वारा
अंदरूनी exception उठी, क्योंकि write() फ़ंक्शन टेक्स्ट नहीं जोड़ पा रहा है।
Unable to write the data. Please add an append:'a'or write:'w' parameter to the open() function.संचालित द्वारा
इस समस्या को हल करने के लिए, हमें तीसरी पंक्ति को data = open(path) से बदलकर data = open(path, 'a') करना होगा। इससे फ़ाइल में नया टेक्स्ट जोड़ना संभव होगा।
फ़ंक्शन फिर से चलाने के बाद, हमने सफलतापूर्वक फ़ाइल में टेक्स्ट जोड़ दिया।
Nested exception handling की सिफ़ारिश नहीं की जाती क्योंकि यह exception handling को अधिक जटिल बना देता है; डेवलपर्स सरल क्रमिक exception handling बनाने के लिए कई try-except ब्लॉक्स का उपयोग करते हैं।
नोट: आप try या except स्टेटमेंट के अंतर्गत भी nested try-except ब्लॉक जोड़ सकते हैं। यह आपकी आवश्यकताओं पर निर्भर करता है।
Python में Exceptions उठाना
exceptions को पकड़ने से आगे बढ़कर, आप raise कीवर्ड का उपयोग करके उन्हें जानबूझकर उठा सकते हैं। यह व्यवसाय नियम लागू करने या इनपुट वैलिडेशन के लिए उपयोगी है। यह एक संकेत देता है कि कुछ गलत है, इससे पहले कि वह आगे चलकर किसी कठिन-से-डिबग विफलता का कारण बने।
exception फेंकने के लिए, हमें raise कीवर्ड के बाद exception का नाम लिखना होता है।
ValueError उठाने का उदाहरण
हम if/else स्टेटमेंट में raise कीवर्ड जोड़कर सरलता से exceptions उठा सकते हैं।
उदाहरण में, यदि मान 1,000 से अधिक है तो हम ValueError उठाते हैं। हमने मान 2,000 कर दिया है, जिससे if स्टेटमेंट TRUE हो गया और कस्टम संदेश के साथ ValueError उठा। कस्टम error संदेश समस्या को जल्दी समझने में मदद करता है।
value =2_000if value >1_000:# raise the ValueErrorraise ValueError("Please add a value lower than 1,000")else:print("Congratulations! You are the winner!!")संचालित द्वारा
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)---->4raise ValueError("Please add a value lower than 1,000")5else:6print("Congratulations! You are the winner!!")
ValueError: Please add a value lower than 1,000संचालित द्वारा
Exception उठाने का उदाहरण
हम शर्त पूरी होने पर कोई भी रैंडम Python built-in exception भी उठा सकते हैं। हमारे मामले में, हमने error संदेश के साथ एक सामान्य Exception उठाया है।
if value >1_000:# raise the Exceptionraise Exception("Please add a value lower than 1,000")else:print("Congratulations! You are the winner!!")संचालित द्वारा
---------------------------------------------------------------------------
Exception Traceback (most recent call last)---->3raise Exception("Please add a value lower than 1,000")4else:5print("Congratulations! You are the winner!!")
Exception: Please add a value lower than 1,000संचालित द्वारा
उठाए गए exception को हैंडल करने का उदाहरण
हम अपना कस्टम exception बना सकते हैं और try-except ब्लॉक का उपयोग करके exception को हैंडल कर सकते हैं।
उदाहरण में, हमने try स्टेटमेंट के अंतर्गत value error उदाहरण जोड़ा है।
तो, यह कैसे काम करेगा? exception फेंकने और प्रोग्राम समाप्त करने के बजाय, यह हमारे द्वारा दिए गए error संदेश को दिखाएगा।
value =2_000try:if value >1_000:# raise the ValueErrorraise ValueError("Please add a value lower than 1,000")else:print("Congratulations! You are the winner!!")# if false then raise the value errorexcept ValueError as e:print(e)संचालित द्वारा
इस प्रकार की exception handling हमें उन errors के लिए तैयार करती है जो Python में कवर नहीं होतीं और आपकी एप्लिकेशन आवश्यकताओं के लिए विशिष्ट होती हैं।
अलग-थलग exceptions उठाने से आगे बढ़कर, आप raise ... from का उपयोग करके exceptions को चेन कर सकते हैं। यह मूल exception को संदर्भ के रूप में सुरक्षित रखता है, जिससे ट्रेसबैक ज़्यादा स्पष्ट हो जाते हैं जब एक error दूसरे का कारण बनती है।
try:open("config.json")except FileNotFoundError as e:raise RuntimeError("App failed to start: config file missing")from eसंचालित द्वारा
FileNotFoundError:[Errno 2] No such fileor directory:'config.json'
The above exception was the direct cause of the following exception:
RuntimeError: App failed to start: config file missingसंचालित द्वारा
यहाँ from e भाग नए exception पर __cause__ एट्रिब्यूट सेट करता है, ताकि ट्रेसबैक पढ़ने वाला कोई भी व्यक्ति देख सके कि उसे ट्रिगर किसने किया। यह विशेष रूप से बड़े अनुप्रयोगों में उपयोगी है जहाँ exceptions कोड की कई परतों से होकर गुजरते हैं।
Exception Handling के लिए Python 3.10 - 3.13 में नया क्या है?
ब्लॉग पोस्ट लिखे जाने के बाद से 3.10 और 3.11 जैसे नए Python संस्करणों में कुछ महत्वपूर्ण नए विकास जोड़े गए हैं:
1. Python 3.10 में Structural pattern matching
Python 3.10 ने structural pattern matching पेश किया, जिसका उपयोग match स्टेटमेंट में error प्रकारों को मैच करके exceptions को और सुरुचिपूर्ण ढंग से संभालने के लिए किया जा सकता है। यह तब विशेष रूप से उपयोगी है जब कई exception प्रकारों से अधिक पठनीय तरीके से निपटना हो। उदाहरण:
try:
result =1/0except Exception as e:match e:case ZeroDivisionError():print("You cannot divide by zero.")case NameError():print("Variable not defined.")case_:print("An unexpected error occurred.")संचालित द्वारा
2. Tracebacks में सूक्ष्म-स्तरीय error लोकेशन (Python 3.11)
Python 3.11 में tracebacks अब सटीक error लोकेशन दिखाते हैं, जिससे exceptions को डिबग करना आसान हो गया है।
Python 3.11 के साथ, tracebacks उस सही sub-expression को इंगित करते हैं जो exception का कारण बन रहा है:
ZeroDivisionError: division by zero
(1+2)*(3/0)^संचालित द्वारा
3. Exception groups और except* (Python 3.11)
Python 3.11 ने exception groups पेश किए ताकि except* का उपयोग करके एक ही ब्लॉक में कई exceptions को संभाला जा सके। यह asynchronous कोड या ऐसे परिदृश्यों को मैनेज करने में उपयोगी है जहाँ कई exceptions उठ सकती हैं। उदाहरण:
try:raise ExceptionGroup("Multiple errors",[ValueError("Bad value"), TypeError("Bad type")])except* ValueError as ve:print(f"Handling ValueError: {ve}")except* TypeError as te:print(f"Handling TypeError: {te}")संचालित द्वारा
4. exceptions के लिए add_note मेथड (Python 3.11)
अब exceptions में add_note() मेथड होता है, जो डेवलपर्स को बेहतर डिबगिंग के लिए exceptions में कस्टम नोट जोड़ने देता है। उदाहरण:
try:raise ValueError("Invalid input")except ValueError as e:
e.add_note("This happened while processing user input.")
e.add_note("Consider validating input before processing.")raiseसंचालित द्वारा
ValueError: Invalid input
Notes:- This happened while processing user input.- Consider validating input before processing.संचालित द्वारा
5. PEP 654: nested exceptions का बेहतर हैंडलिंग
exception groups के साथ, nested exceptions को अब डिबग और हैंडल करना आसान है, विशेषकर जटिल वर्कफ़्लो जैसे multiprocessing या asynchronous tasks में।
6. बेहतर error संदेश (Python 3.12)
Python 3.12 ने error संदेशों को और विशिष्ट एवं क्रियाशील बनाने के लम्बे प्रयास को आगे बढ़ाया। उदाहरण के लिए, NameError संदेश अब स्कोप में उपलब्ध मिलते-जुलते वेरिएबल सुझाते हैं, और सामान्य प्रकारों पर attribute errors अधिक लक्षित संकेत देते हैं:
# Python 3.12+
my_list =[1,2,3]
my_list.appendd(4)संचालित द्वारा
AttributeError:'list'object has no attribute 'appendd'. Did you mean:'append'?संचालित द्वारा
7. रंगीन tracebacks (Python 3.13)
Python 3.13 ने इंटरैक्टिव इंटरप्रेटर में डिफ़ॉल्ट रूप से रंगीन tracebacks पेश किए। error प्रकार, लाइन नंबर, और संदेश अब अलग-अलग रंगों में हाइलाइट होते हैं, जिससे लंबे tracebacks में, खासकर कई chained exceptions के साथ, क्या गड़बड़ी हुई यह तेज़ी से समझ में आता है।
निष्कर्ष
दोनों unit testing और exception handling Python प्रोग्रामिंग के मुख्य हिस्से हैं जो आपके कोड को production-ready और error-proof बनाते हैं। इस ट्यूटोरियल में, हमने Python में exceptions और errors के बारे में और उन्हें कैसे हैंडल करना है, यह सीखा। इसके अलावा, हमने जटिल nested try-except ब्लॉक्स के बारे में सीखा और आवश्यकताओं के आधार पर कस्टम exception ब्लॉक्स बनाए।
ये टूल्स और तंत्र अनिवार्य हैं, पर अधिकांश काम सरल try और except ब्लॉक्स से ही हो जाता है। जहाँ try कोड द्वारा उठाए गए exceptions को ढूँढ़ता है और except उन्हें संभालता है।
यदि यह भ्रमित कर रहा है और आप नहीं जानते कि कहाँ से शुरू करें, तो हमारा Introduction to Functions in Python कोर्स पूरा करें ताकि scoping, lambda फ़ंक्शंस, और error handling समझ सकें। आप Python Programmer करियर ट्रैक में भी दाखिला ले सकते हैं ताकि करियर-निर्माण कौशल हासिल कर एक पेशेवर Python डेवलपर बन सकें।
एक प्रमाणित डेटा साइंटिस्ट के रूप में, मैं अत्याधुनिक तकनीक का उपयोग करके नवाचारी मशीन लर्निंग अनुप्रयोग बनाने के लिए उत्साहित रहता/रहती हूँ। स्पीच रिकॉग्निशन, डेटा विश्लेषण और रिपोर्टिंग, MLOps, संवादात्मक AI और NLP में मजबूत पृष्ठभूमि के साथ, मैंने ऐसे बुद्धिमान सिस्टम विकसित करने में अपनी विशेषज्ञता निखारी है जो वास्तविक प्रभाव डाल सकें। तकनीकी दक्षता के अलावा, मैं जटिल अवधारणाओं को स्पष्ट और संक्षिप्त भाषा में प्रस्तुत करने में भी निपुण हूँ। परिणामस्वरूप, मैं डेटा साइंस पर एक मांग में रहने वाला/वाली ब्लॉगर बन गया/गई हूँ, और डेटा प्रोफेशनलों के बढ़ते समुदाय के साथ अपने अनुभव और विचार साझा करता/करती हूँ। वर्तमान में, मैं कंटेंट निर्माण और संपादन पर केंद्रित हूँ, बड़े भाषा मॉडलों के साथ काम करते हुए ऐसा प्रभावशाली और आकर्षक कंटेंट विकसित कर रहा/रही हूँ जो व्यवसायों और व्यक्तियों दोनों को अपने डेटा का अधिकतम लाभ उठाने में मदद कर सके।
FAQs
Python में एक error और exception में क्या अंतर है?⌄
Python में error आम तौर पर अधिक गंभीर समस्या होती है जो प्रोग्राम को आगे चलने से रोक देती है, जैसे syntax error, जो दर्शाता है कि कोड संरचना गलत है। दूसरी ओर, exception वह स्थिति है जो प्रोग्राम के सामान्य प्रवाह को बाधित करती है पर उसे try-except ब्लॉक्स की मदद से प्रोग्राम के भीतर संभाला जा सकता है, जिससे प्रोग्राम आगे निष्पादित होता रहता है।
क्या आप एक ही try-except ब्लॉक में कई exceptions पकड़ सकते हैं?⌄
हाँ, Python आपको एक ही try-except ब्लॉक में कई exceptions को पकड़ने देता है, इसके लिए exception प्रकारों का एक tuple उपयोग किया जाता है। उदाहरण के लिए: except (TypeError, ValueError):। यह एक ही ब्लॉक में TypeError या ValueError को हैंडल करेगा।
आप Python में कस्टम exception कैसे बना सकते हैं?⌄
आप एक कस्टम exception उस नई क्लास को परिभाषित करके बना सकते हैं जो built-in Exception क्लास से इनहरिट करती हो। उदाहरण:
try-except संरचना में else ब्लॉक का उद्देश्य क्या है?⌄
else ब्लॉक तब निष्पादित होता है जब try ब्लॉक exception नहीं उठाता। यह उस कोड के लिए उपयोगी है जिसे केवल तब चलना चाहिए जब try ब्लॉक सफल हो, जिससे कोड स्वच्छ रहता है और error हैंडलिंग सामान्य निष्पादन पथ से अलग रहती है।
exception handling में finally ब्लॉक महत्वपूर्ण क्यों है?⌄
finally ब्लॉक हमेशा निष्पादित होता है, चाहे exception उठे या नहीं। इसे आमतौर पर क्लीनअप कार्रवाइयों के लिए उपयोग किया जाता है, जैसे फ़ाइलें बंद करना या संसाधन मुक्त करना, ताकि ये कार्रवाइयाँ हर स्थिति में हो जाएँ।
आप Python में exceptions को कैसे suppress कर सकते हैं?⌄
आप contextlib.suppress context manager का उपयोग करके exceptions को suppress कर सकते हैं। यह आपको उन exception प्रकारों को निर्दिष्ट करने देता है जिन्हें अनदेखा करना चाहिए। उदाहरण:
from contextlib import suppress
with suppress(FileNotFoundError):open('non_existent_file.txt')संचालित द्वारा
यदि किसी Python प्रोग्राम में exception नहीं पकड़ी जाए तो क्या होता है?⌄
यदि किसी exception को नहीं पकड़ा जाता, तो वह call stack में ऊपर की ओर propagate होती है, और यदि फिर भी unhandled रहे, तो वह प्रोग्राम को समाप्त कर देती है और कंसोल पर एक ट्रेसबैक प्रिंट करती है जो दिखाता है कि exception कहाँ हुई।
क्या आप किसी exception को पकड़ने के बाद फिर से उठा सकते हैं?⌄
हाँ, आप raise स्टेटमेंट को बिना argument के except ब्लॉक में उपयोग कर exception को दोबारा उठा सकते हैं। यह तब उपयोगी है जब आप exception को आगे बढ़ने देने से पहले उसे लॉग करना या कुछ अन्य कार्रवाई करना चाहते हैं।
क्या Python में सभी exceptions को एक साथ हैंडल करने का कोई तरीका है?⌄
हालाँकि एक खाली except: क्लॉज़ से सभी exceptions पकड़ी जा सकती हैं, लेकिन यह सामान्यतः अनुशंसित नहीं है क्योंकि इससे अप्रत्याशित exceptions भी पकड़ी जा सकती हैं और डिबगिंग कठिन हो सकती है। बेहतर है कि विशिष्ट exceptions को पकड़ा जाए या except Exception: का उपयोग किया जाए ताकि SystemExit और KeyboardInterrupt जैसे सिस्टम-एक्ज़िटिंग exceptions को पकड़ने से बचा जा सके।
घटित होने के समय के संदर्भ में आप syntax error और runtime exceptions में कैसे अंतर करते हैं?⌄
Syntax errors कंपाइल समय पर पकड़ी जाती हैं, यानी Python इंटरप्रेटर प्रोग्राम शुरू होने से पहले ही इन errors को पकड़ लेता है। रनटाइम exceptions प्रोग्राम के निष्पादन के दौरान होती हैं, जब इंटरप्रेटर ऐसे ऑपरेशन से टकराता है जिसे वह कर नहीं सकता, जैसे शून्य से भाग देना या किसी गैर-मौजूद वेरिएबल को एक्सेस करना।
Python के साथ डेटा विश्लेषण की बुनियादी बातें सिर्फ चार घंटे में सीखें। यह ऑनलाइन पाठ्यक्रम Python इंटरफ़ेस का परिचय देगा और लोकप्रिय पैकेजों का अन्वेषण करेगा।
Errors और exceptions अप्रत्याशित व्यवहार का कारण बन सकते हैं या प्रोग्राम को चलने से ही रोक सकते हैं। Python इन समस्याओं को संभालने और कोड की मजबूती बढ़ाने के लिए कई फ़ंक्शंस और तंत्र प्रदान करता है। इस ट्यूटोरियल में, हम विभिन्न error प्रकारों और built-in फ़ंक्शंस के बारे में उदाहरणों सहित सीखेंगे।
जहाँ exceptions रनटाइम पर होते हैं, वहीं कुछ errors जैसे
SyntaxErrorऔरIndentationErrorप्रोग्राम चलने से पहले ही parser द्वारा पकड़ लिए जाते हैं।सरल शब्दों में, error एक गंभीर मुद्दा है जिसे सामान्य एप्लिकेशन द्वारा नहीं पकड़ना चाहिए, जबकि exception एक ऐसी स्थिति है जिसे प्रोग्राम को पकड़ना चाहिए।
विभिन्न उदाहरणों को देखकर errors और exceptions के बारे में और जानें। इन्हें आसानी से चलाने के लिए, आप मुफ़्त में एक DataLab workbook बनाएँ जिसमें Python पहले से इंस्टॉल है और सभी कोड सैंपल शामिल हैं।
Python में Errors
यहाँ एक सिंटैक्स एरर का उदाहरण है जहाँ फ़ंक्शन के बाहर return का कोई मतलब नहीं। हमें प्रोग्राम में errors को हैंडल नहीं करना चाहिए। इसके बजाय, हमें ऐसा फ़ंक्शन बनाना चाहिए जो स्ट्रिंग लौटाए।
हमने फ़ंक्शन बनाया है, लेकिन गलत इंडेंटेशन के साथ। रनटाइम पर इंडेंटेशन एरर हैंडल नहीं करना चाहिए। इसे मैन्युअली ठीक करें या कोड फ़ॉर्मेटिंग टूल्स का उपयोग करें।
Python में Exceptions
हमें
ZeroDivisionError(Exception) का सामना करना पड़ा है। हम इसे रनटाइम परtryऔरexceptब्लॉक का उपयोग करके संभाल सकते हैं।NameErrorexceptions काफ़ी आम हैं, जहाँ कोई वेरिएबल नहीं मिलता। हम इसे वेरिएबल बदलकर या चेतावनी प्रिंट करके भी संभाल सकते हैं।Python की Built-in Exceptions
यहाँ डिफ़ॉल्ट Python exceptions की सूची उनके विवरण सहित दी गई है:
AssertionError: तब उठती है जब assert स्टेटमेंट असफल हो।EOFError: तब उठती है जबinput()फ़ंक्शन end-of-file स्थिति से मिलता है।AttributeError: तब उठती है जब किसी attribute का असाइनमेंट या reference असफल हो।TabError: तब उठती है जब इंडेंटेशन असंगत tabs या spaces से बना हो।ImportError: तब उठती है जब मॉड्यूल को import करना असफल हो।IndexError: तब होती है जब किसी sequence का index सीमा से बाहर हो।KeyboardInterrupt: तब उठती है जब उपयोगकर्ता interrupt keys (Ctrl + C या Delete) दबाता है।RuntimeError: तब होती है जब error किसी भी श्रेणी में फिट नहीं बैठती।NameError: तब उठती है जब कोई वेरिएबल local या global scope में नहीं मिलता।MemoryError: तब उठती है जब प्रोग्राम की मेमोरी समाप्त हो जाए।ValueError: तब होती है जब ऑपरेशन या फ़ंक्शन को सही प्रकार का, पर गलत मान वाला argument मिले।ZeroDivisionError: तब उठती है जब आप किसी मान या वेरिएबल को शून्य से विभाजित करें।SyntaxError: तब parser द्वारा उठाई जाती है जब Python सिंटैक्स गलत हो।IndentationError: तब होती है जब इंडेंटेशन गलत हो।SystemError: तब उठती है जब इंटरप्रेटर कोई आंतरिक error पहचानता है।Python में errors और exceptions की पूरी सूची आप दस्तावेज़ पढ़कर पा सकते हैं।
हमारा Object-Oriented Programming in Python कोर्स लेकर Python exceptions के बारे में जानें। यह आपको क्लासेज़ बनाना और इनहरिटेंस व पोलिमॉर्फ़िज़्म का उपयोग कर कोड को पुन: प्रयोग और अनुकूलित करना सिखाएगा।
try, except, else, और finally के साथ Exception Handling
errors और exceptions के बारे में जानने के बाद, अब हम
try,except,else, औरfinallyब्लॉक का उपयोग करके उन्हें हैंडल करना सीखेंगे।तो, उन्हें हैंडल करने से हमारा मतलब क्या है? सामान्य स्थिति में, ये errors कोड निष्पादन को रोक देंगी और error संदेश दिखाएँगी। स्थिर सिस्टम बनाने के लिए, हमें इन errors का अनुमान लगाना होता है और वैकल्पिक समाधान या चेतावनी संदेश प्रस्तुत करने होते हैं।
इस खंड में, हम सीखेंगे कि हर ब्लॉक क्या करता है और हम उन्हें मजबूत कोड लिखने के लिए कैसे उपयोग कर सकते हैं।
The try and except statement
Python में exceptions को संभालने का सबसे सरल तरीका
tryऔरexceptब्लॉक का उपयोग करना है।tryस्टेटमेंट के अंतर्गत कोड चलाएँ।जब कोई exception उठे, तो
exceptस्टेटमेंट के अंतर्गत कोड चलाएँ।error या exception पर रुकने के बजाय, हमारा कोड वैकल्पिक समाधानों की ओर बढ़ेगा।
सरल उदाहरण
पहले उदाहरण में, हम अपरिभाषित
xवेरिएबल को प्रिंट करने की कोशिश करेंगे। सामान्य स्थिति में, इसे error फेंकनी चाहिए और निष्पादन रोक देना चाहिए, परtryऔरexceptब्लॉक के साथ, हम फ्लो का व्यवहार बदल सकते हैं।tryस्टेटमेंट के अंतर्गत कोड चलाएगा।xपरिभाषित नहीं है, तो यह except स्टेटमेंट चलाएगा और चेतावनी प्रिंट करेगा।Multiple except स्टेटमेंट का उदाहरण
दूसरे उदाहरण में, हम कई प्रकार के exceptions को संभालने के लिए एक से अधिक
exceptस्टेटमेंट का उपयोग करेंगे।ZeroDivisionErrorexception उठती है, तो प्रोग्राम "You cannot divide a value with zero." प्रिंट करेगा।यह हमें लचीला कोड लिखने देता है जो कई exceptions को एक साथ हैंडल कर सके बिना टूटे।
नोट: बिना exception प्रकार बताए एक खाली
except:क्लॉज़ का उपयोग करने से बचें — यह सब कुछ पकड़ता है, जिसमेंKeyboardInterruptऔरSystemExitभी शामिल हैं, जिससे आपका प्रोग्राम बंद करना असंभव हो सकता है और असंबंधित बग छिप सकते हैं। हमेशा अपेक्षित विशेष exception को पकड़ें, जैसेexcept ZeroDivisionError:।फ़ाइल लोड करने का उदाहरण
अब, एक अधिक व्यावहारिक उदाहरण देखें।
नीचे दिए गए कोड में, हम CSV फ़ाइल पढ़ रहे हैं, और जब
FileNotFoundErrorexception उठती है, तो कोड error औरdata.csvफ़ाइल के बारे में एक अतिरिक्त संदेश प्रिंट करेगा।हाँ, हम डिफ़ॉल्ट error संदेश प्रिंट कर सकते हैं बिना निष्पादन तोड़े।
else क्लॉज़ के साथ try
हमने
tryऔरexceptके बारे में सीखा है, और अब हमelseस्टेटमेंट के बारे में सीखेंगे।जब
tryस्टेटमेंट कोई exception नहीं उठाता, तो कोडelseब्लॉक में जाता है। यह तब का उपाय या fallback विकल्प है जब आपको उम्मीद हो कि आपकी स्क्रिप्ट का कोई भाग exception पैदा कर सकता है। इसे आम तौर पर एक संक्षिप्त सेटअप या सत्यापन खंड में उपयोग किया जाता है जहाँ आप नहीं चाहते कि कुछ errors छिप जाएँ।नोट: try-except ब्लॉक में, आप
elseको सभीexceptस्टेटमेंट्स के बाद उपयोग कर सकते हैं।सरल उदाहरण
हम
ZeroDivisionErrorउदाहरण मेंelseस्टेटमेंट जोड़ रहे हैं। जैसा कि दिखता है, जब कोई exception नहीं उठती, तोelseस्टेटमेंट के अंतर्गत प्रिंट फ़ंक्शन चलता है और परिणाम दिखाता है।IndexError के साथ else का उदाहरण
आइए एक सरल फ़ंक्शन बनाकर और विभिन्न परिदृश्यों के लिए परीक्षण करके और जानें।
find_nth_value()फ़ंक्शन मेंx(लिस्ट) औरn(इंडेक्स नंबर) argument हैं। हमनेIndexErrorexception को संभालने के लिएtry,except, औरelseब्लॉक बनाए हैं।लिस्ट
xमें चार मान हैं, और हम उन्हें 6वें और 2रे इंडेक्स के लिए टेस्ट करेंगे।IndexErrorexception उठी, और हमें डिफ़ॉल्ट error संदेश “list index out of range.” दिखा।elseस्टेटमेंट के अंतर्गत परिणाम प्रिंट किया।Python में finally कीवर्ड
try-exceptब्लॉक मेंfinallyकीवर्ड हमेशा चलता है, चाहे exception हो या न हो।finallyब्लॉक हमेशाtry,except, औरelseके बाद ही चलता है, चाहे exception उठी हो या पकड़ी गई हो। यह संसाधन साफ़ करने और ऑब्जेक्ट बंद करने में बहुत उपयोगी है, विशेषकर फ़ाइलें बंद करने में।divideफ़ंक्शनZeroDivisionErrorexceptions को संभालने और बिना exception के परिणाम दिखाने के लिए बनाया गया है। चाहे नतीजा कुछ भी हो, यह हमेशाfinallyचलाकर हरे रंग में “Code by DataCamp” प्रिंट करेगा।पहले टेस्ट में, हम 1 को 0 से बाँट रहे हैं, जिसे
ZeroDivisionErrorexception उठनी चाहिए और संदेश प्रिंट होना चाहिए। जैसा कि हम देखते हैं, error संदेश के बाद एक अतिरिक्त पंक्ति है।जब हम मान्य इनपुट देते हैं, तो यह
elseऔरfinallyब्लॉक चलाकर परिणाम दिखाता है।इंटीजर के बजाय, हमने दूसरे argument के रूप में स्ट्रिंग दी, जिससे
ZeroDivisionErrorसे अलग एक exception उठा, और अलग संदेश मिला।तीनों परिदृश्यों में एक बात समान है। कोड हमेशा
finallyस्टेटमेंट के अंतर्गत प्रिंट फ़ंक्शन चलाता है।यदि आप Python में नए हैं और एक वास्तविक प्रोग्रामर की तरह कोड करना चाहते हैं, तो हमारा Python Programming स्किल ट्रैक आज़माएँ। आप कुशल कोड, Python फ़ंक्शंस, सॉफ़्टवेयर इंजीनियरिंग, यूनिट टेस्टिंग, और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग सीखेंगे।
Python में Nested Exception Handling
हमें nested exception handling तब चाहिए जब हम प्रोग्राम को क्रम में कई exceptions संभालने के लिए तैयार कर रहे हों। उदाहरण के लिए, हम
elseस्टेटमेंट के अंतर्गत एक और try-except ब्लॉक जोड़ सकते हैं। तो, यदि पहला स्टेटमेंट exception नहीं उठाता, तो दूसरे स्टेटमेंट और कोड के बाकी हिस्से को जाँचें।divide फ़ंक्शन में बदलाव
हमने पिछले उदाहरण के
divideफ़ंक्शन में बदलाव किए हैं औरelseस्टेटमेंट के अंतर्गत nested try-except ब्लॉक जोड़ा है। यानी, यदिAttributeErrorनहीं है, तो यहelseचलाएगा और नए कोड कोZeroDivisionErrorexception के लिए जाँचेगा।पहले परिदृश्य में, हम चार मानों की लिस्ट
xऔर हर के रूप में 3 दे रहे हैं। स्क्रिप्ट लिस्ट में 50 जोड़ेगी, लिस्ट के प्रत्येक मान को 3 से विभाजित करेगी, और परिणाम दिखाएगी।फ़ंक्शन बिना कोई exception उठाए सफलतापूर्वक चला।
लिस्ट के बजाय, हमने पहले argument में इंटीजर दिया, जिससे
AttributeErrorउठा।अंतिम परिदृश्य में, हमने लिस्ट दी है, पर दूसरा argument 0 है, जिससे
elseस्टेटमेंट के अंतर्गतZeroDivisionErrorउठा।फ़ाइल एडिटिंग का उदाहरण
आइए फ़ाइल लोड करने, टेक्स्ट लिखने और फ़ाइल बंद करने के कुछ और व्यावहारिक उदाहरण देखें।
file_editor()फ़ंक्शन यह करेगा:open()फ़ंक्शन के लिएFileNotFoundErrorexception जाँचेगा।write()फ़ंक्शन की exception जाँची जाएगी।finallyस्टेटमेंट चलाकर फ़ाइल को बंद किया जाएगा।पहले परिदृश्य में, हम फ़ाइल पथ और टेक्स्ट देते हैं।
बाहरी exception उठी।
फ़ाइल न मिलने की exception दूर करने के लिए, हमें Linux के
echoकमांड सेdata.txtफ़ाइल बनानी होगी।इसके बाद,
file_editor()फ़ंक्शन दोबारा चलाएँ।अंदरूनी exception उठी, क्योंकि
write()फ़ंक्शन टेक्स्ट नहीं जोड़ पा रहा है।इस समस्या को हल करने के लिए, हमें तीसरी पंक्ति को
data = open(path)से बदलकरdata = open(path, 'a')करना होगा। इससे फ़ाइल में नया टेक्स्ट जोड़ना संभव होगा।फ़ंक्शन फिर से चलाने के बाद, हमने सफलतापूर्वक फ़ाइल में टेक्स्ट जोड़ दिया।
Nested exception handling की सिफ़ारिश नहीं की जाती क्योंकि यह exception handling को अधिक जटिल बना देता है; डेवलपर्स सरल क्रमिक exception handling बनाने के लिए कई
try-exceptब्लॉक्स का उपयोग करते हैं।नोट: आप
tryयाexceptस्टेटमेंट के अंतर्गत भी nestedtry-exceptब्लॉक जोड़ सकते हैं। यह आपकी आवश्यकताओं पर निर्भर करता है।Python में Exceptions उठाना
exceptions को पकड़ने से आगे बढ़कर, आप
raiseकीवर्ड का उपयोग करके उन्हें जानबूझकर उठा सकते हैं। यह व्यवसाय नियम लागू करने या इनपुट वैलिडेशन के लिए उपयोगी है। यह एक संकेत देता है कि कुछ गलत है, इससे पहले कि वह आगे चलकर किसी कठिन-से-डिबग विफलता का कारण बने।exception फेंकने के लिए, हमें
raiseकीवर्ड के बाद exception का नाम लिखना होता है।ValueError उठाने का उदाहरण
हम
if/elseस्टेटमेंट में raise कीवर्ड जोड़कर सरलता से exceptions उठा सकते हैं।उदाहरण में, यदि मान 1,000 से अधिक है तो हम
ValueErrorउठाते हैं। हमने मान 2,000 कर दिया है, जिससेifस्टेटमेंटTRUEहो गया और कस्टम संदेश के साथValueErrorउठा। कस्टम error संदेश समस्या को जल्दी समझने में मदद करता है।Exception उठाने का उदाहरण
हम शर्त पूरी होने पर कोई भी रैंडम Python built-in exception भी उठा सकते हैं। हमारे मामले में, हमने error संदेश के साथ एक सामान्य Exception उठाया है।
उठाए गए exception को हैंडल करने का उदाहरण
हम अपना कस्टम exception बना सकते हैं और
try-exceptब्लॉक का उपयोग करके exception को हैंडल कर सकते हैं।उदाहरण में, हमने
tryस्टेटमेंट के अंतर्गत value error उदाहरण जोड़ा है।तो, यह कैसे काम करेगा? exception फेंकने और प्रोग्राम समाप्त करने के बजाय, यह हमारे द्वारा दिए गए error संदेश को दिखाएगा।
इस प्रकार की exception handling हमें उन errors के लिए तैयार करती है जो Python में कवर नहीं होतीं और आपकी एप्लिकेशन आवश्यकताओं के लिए विशिष्ट होती हैं।
raise ... from के साथ Exception chaining
अलग-थलग exceptions उठाने से आगे बढ़कर, आप
raise ... fromका उपयोग करके exceptions को चेन कर सकते हैं। यह मूल exception को संदर्भ के रूप में सुरक्षित रखता है, जिससे ट्रेसबैक ज़्यादा स्पष्ट हो जाते हैं जब एक error दूसरे का कारण बनती है।यहाँ
from eभाग नए exception पर__cause__एट्रिब्यूट सेट करता है, ताकि ट्रेसबैक पढ़ने वाला कोई भी व्यक्ति देख सके कि उसे ट्रिगर किसने किया। यह विशेष रूप से बड़े अनुप्रयोगों में उपयोगी है जहाँ exceptions कोड की कई परतों से होकर गुजरते हैं।Exception Handling के लिए Python 3.10 - 3.13 में नया क्या है?
ब्लॉग पोस्ट लिखे जाने के बाद से 3.10 और 3.11 जैसे नए Python संस्करणों में कुछ महत्वपूर्ण नए विकास जोड़े गए हैं:
1. Python 3.10 में Structural pattern matching
Python 3.10 ने structural pattern matching पेश किया, जिसका उपयोग
matchस्टेटमेंट में error प्रकारों को मैच करके exceptions को और सुरुचिपूर्ण ढंग से संभालने के लिए किया जा सकता है। यह तब विशेष रूप से उपयोगी है जब कई exception प्रकारों से अधिक पठनीय तरीके से निपटना हो। उदाहरण:2. Tracebacks में सूक्ष्म-स्तरीय error लोकेशन (Python 3.11)
Python 3.11 में tracebacks अब सटीक error लोकेशन दिखाते हैं, जिससे exceptions को डिबग करना आसान हो गया है।
Python 3.11 से पहले:
Python 3.11 के साथ, tracebacks उस सही sub-expression को इंगित करते हैं जो exception का कारण बन रहा है:
3. Exception groups और except* (Python 3.11)
Python 3.11 ने exception groups पेश किए ताकि
except*का उपयोग करके एक ही ब्लॉक में कई exceptions को संभाला जा सके। यह asynchronous कोड या ऐसे परिदृश्यों को मैनेज करने में उपयोगी है जहाँ कई exceptions उठ सकती हैं। उदाहरण:4. exceptions के लिए add_note मेथड (Python 3.11)
अब exceptions में
add_note()मेथड होता है, जो डेवलपर्स को बेहतर डिबगिंग के लिए exceptions में कस्टम नोट जोड़ने देता है। उदाहरण:5. PEP 654: nested exceptions का बेहतर हैंडलिंग
exception groups के साथ, nested exceptions को अब डिबग और हैंडल करना आसान है, विशेषकर जटिल वर्कफ़्लो जैसे multiprocessing या asynchronous tasks में।
6. बेहतर error संदेश (Python 3.12)
Python 3.12 ने error संदेशों को और विशिष्ट एवं क्रियाशील बनाने के लम्बे प्रयास को आगे बढ़ाया। उदाहरण के लिए,
NameErrorसंदेश अब स्कोप में उपलब्ध मिलते-जुलते वेरिएबल सुझाते हैं, और सामान्य प्रकारों पर attribute errors अधिक लक्षित संकेत देते हैं:7. रंगीन tracebacks (Python 3.13)
Python 3.13 ने इंटरैक्टिव इंटरप्रेटर में डिफ़ॉल्ट रूप से रंगीन tracebacks पेश किए। error प्रकार, लाइन नंबर, और संदेश अब अलग-अलग रंगों में हाइलाइट होते हैं, जिससे लंबे tracebacks में, खासकर कई chained exceptions के साथ, क्या गड़बड़ी हुई यह तेज़ी से समझ में आता है।
निष्कर्ष
दोनों unit testing और exception handling Python प्रोग्रामिंग के मुख्य हिस्से हैं जो आपके कोड को production-ready और error-proof बनाते हैं। इस ट्यूटोरियल में, हमने Python में exceptions और errors के बारे में और उन्हें कैसे हैंडल करना है, यह सीखा। इसके अलावा, हमने जटिल nested try-except ब्लॉक्स के बारे में सीखा और आवश्यकताओं के आधार पर कस्टम exception ब्लॉक्स बनाए।
ये टूल्स और तंत्र अनिवार्य हैं, पर अधिकांश काम सरल
tryऔरexceptब्लॉक्स से ही हो जाता है। जहाँtryकोड द्वारा उठाए गए exceptions को ढूँढ़ता है औरexceptउन्हें संभालता है।यदि यह भ्रमित कर रहा है और आप नहीं जानते कि कहाँ से शुरू करें, तो हमारा Introduction to Functions in Python कोर्स पूरा करें ताकि scoping, lambda फ़ंक्शंस, और error handling समझ सकें। आप Python Programmer करियर ट्रैक में भी दाखिला ले सकते हैं ताकि करियर-निर्माण कौशल हासिल कर एक पेशेवर Python डेवलपर बन सकें।