1. Python में Exception क्या है?
Python में एक exception वह त्रुटि प्रकार है जो प्रोग्राम के निष्पादन के दौरान उत्पन्न होती है। सामान्यतः, प्रोग्राम ऊपर से नीचे क्रमिक रूप से चलता है, लेकिन यदि कुछ शर्तों के तहत त्रुटि आती है, तो निष्पादन बाधित हो जाता है और एक exception उठाया जाता है।
उदाहरण के लिए, शून्य से भाग देने का प्रयास करने पर ZeroDivisionError उत्पन्न होता है, और सूची में मौजूद नहीं होने वाले इंडेक्स को एक्सेस करने पर IndexError उठता है।
1.1 सामान्य Exception प्रकार
Python में कई बिल्ट‑इन exceptions हैं। यहाँ कुछ सामान्य उदाहरण हैं:
ValueError: जब कोई फ़ंक्शन सही प्रकार का तर्क प्राप्त करता है लेकिन मान अनुपयुक्त होता है, तब उठाया जाता है।TypeError: जब कोई ऑपरेशन या फ़ंक्शन अनुपयुक्त प्रकार के ऑब्जेक्ट पर लागू किया जाता है, तब उठाया जाता है।IndexError: जब क्रम (जैसे सूची) में सीमा से बाहर के इंडेक्स को एक्सेस करने का प्रयास किया जाता है, तब उठाया जाता है।ZeroDivisionError: शून्य से भाग देने के प्रयास पर उठाया जाता है।
इन exceptions से प्रोग्राम के निष्पादन के दौरान अप्रत्याशित त्रुटियों के होने पर उपयोगी निदान जानकारी मिलती है।
2. try और except के साथ बुनियादी Exception हैंडलिंग
Python try और except का उपयोग करके exception हैंडलिंग की अनुमति देता है। इससे त्रुटि के कारण प्रोग्राम क्रैश नहीं होता और exception मिलने के बाद भी यह चलना जारी रख सकता है।
2.1 बुनियादी सिंटैक्स
try ब्लॉक में वह कोड होता है जो त्रुटि उत्पन्न कर सकता है, जबकि except ब्लॉक में त्रुटि होने पर उसे कैसे संभालना है, यह परिभाषित किया जाता है।
try:
result = 10 / 0
except ZeroDivisionError:
print("You cannot divide by zero.")
इस उदाहरण में, यदि ZeroDivisionError उत्पन्न होता है, तो except ब्लॉक चलाया जाता है और “You cannot divide by zero.” प्रिंट करता है।
2.2 कई Exceptions को संभालना
यदि आपको विभिन्न प्रकार के exceptions को अलग-अलग संभालना है, तो आप कई except ब्लॉकों का उपयोग कर सकते हैं।
उदाहरण के लिए, आप NameError और TypeError को अलग-अलग संभाल सकते हैं:
try:
print(a)
except NameError:
print("Variable 'a' is not defined.")
except TypeError:
print("An invalid type was used.")
इस कोड में, क्योंकि a परिभाषित नहीं है, एक NameError उत्पन्न होता है, और संबंधित संदेश प्रदर्शित होता है।
3. एक ही except ब्लॉक में कई Exceptions को संभालना
यदि आपके प्रोग्राम में कई प्रकार के exceptions आ सकते हैं, तो आप उन्हें एक ही except ब्लॉक में साथ में संभाल सकते हैं।
3.1 ट्यूपल का उपयोग करके कई Exceptions को संभालना
आप ट्यूपल का उपयोग करके एक ही except ब्लॉक में कई exception प्रकार निर्दिष्ट कर सकते हैं:
try:
num = int(input("Enter a number: "))
result = 10 / num
except (ValueError, ZeroDivisionError):
print("Invalid input or attempt to divide by zero.")
इस उदाहरण में, यदि उपयोगकर्ता अमान्य मान दर्ज करता है या शून्य से भाग देने का प्रयास करता है, तो प्रोग्राम दोनों मामलों को साथ में संभालता है और “Invalid input or attempt to divide by zero.” प्रिंट करता है।
3.2 पैरेंट क्लास का उपयोग करके कई Exceptions को संभालना
Exception क्लास अधिकांश बिल्ट‑इन exceptions की पैरेंट क्लास है।
आप इस क्लास का उपयोग करके सभी exceptions को पकड़ सकते हैं, लेकिन इसे सावधानी से उपयोग करना चाहिए क्योंकि यह बहुत सारे त्रुटियों को पकड़ लेता है।
try:
# Code that may raise an error
except Exception as e:
print("An error occurred:", e)
यह विधि किसी भी exception को पकड़ती है और एक संदेश प्रिंट करती है। हालांकि, बेहतर त्रुटि हैंडलिंग के लिए संभव हो तो विशिष्ट exceptions को संभालना अनुशंसित है।

4. raise के साथ Exceptions उठाना
कभी‑कभी, यदि कुछ शर्तें पूरी नहीं होतीं, तो आपको मैन्युअली exception उठाने की आवश्यकता पड़ सकती है।
यह raise स्टेटमेंट का उपयोग करके किया जा सकता है।
4.1 raise का उपयोग कैसे करें
निम्न उदाहरण में यदि नकारात्मक मान पास किया जाता है तो ValueError उठाया जाता है:
def check_value(value):
if value < 0:
raise ValueError("Negative values are not allowed.")
return value
try:
result = check_value(-1)
except ValueError as e:
print(e)
इस उदाहरण में, क्योंकि -1 को check_value फ़ंक्शन में पास किया गया है, एक ValueError उठाया जाता है, जो संदेश प्रदर्शित करता है: “Negative values are not allowed.”
4.2 raise का उन्नत उपयोग
raise कथन का उपयोग कस्टम अपवाद वर्ग (custom exception classes) को परिभाषित करने के लिए भी किया जा सकता है। कस्टम अपवाद बनाकर और उन्हें विशिष्ट परिस्थितियों में उठाकर, आप त्रुटि संभालने को अधिक लचीला बना सकते हैं।
5. अपवाद जानकारी प्राप्त करना
जब कोई अपवाद उत्पन्न होता है, तो विस्तृत जानकारी प्राप्त करना समस्या का निदान और डिबग करने में मदद कर सकता है। except ब्लॉक में as क्लॉज़ का उपयोग करने से आप अपवाद ऑब्जेक्ट को कैप्चर कर सकते हैं।
5.1 as क्लॉज़ का उपयोग
निम्न उदाहरण अपवाद ऑब्जेक्ट को e के रूप में कैप्चर करता है और उसका संदेश प्रदर्शित करता है:
try:
result = 10 / 0
except ZeroDivisionError as e:
print("An error occurred:", e)
यदि ZeroDivisionError उत्पन्न होता है, तो यह कोड प्रिंट करता है:
“एक त्रुटि हुई: शून्य से विभाजन”
अपवाद ऑब्जेक्ट में अपवाद प्रकार और त्रुटि संदेश जैसी विवरण शामिल होते हैं।
5.2 अपवाद ऑब्जेक्ट्स का उपयोग
अपवाद ऑब्जेक्ट केवल त्रुटि संदेश प्रदर्शित करने के लिए ही उपयोगी नहीं होते, बल्कि त्रुटियों को लॉग करने और विशिष्ट त्रुटियों के लिए अतिरिक्त हैंडलिंग लागू करने में भी मदद करते हैं। उदाहरण के लिए, आप त्रुटि संदेशों को एक लॉग फ़ाइल में लिख सकते हैं जिससे बाद में डिबगिंग में सहायता मिलती है।
6. अपवाद हैंडलिंग के सर्वोत्तम अभ्यास
प्रभावी अपवाद हैंडलिंग प्रोग्राम की मजबूती और विश्वसनीयता को बढ़ाती है। यहाँ Python में अपवादों को संभालने के कुछ सर्वोत्तम अभ्यास दिए गए हैं।
6.1 विशिष्ट अपवादों को पकड़ें
जहाँ तक संभव हो, व्यापक Exception हैंडलर के बजाय विशिष्ट अपवादों को पकड़ें। ValueError या TypeError जैसे अपवादों को पकड़ने से स्पष्ट और अधिक इरादे वाले त्रुटि हैंडलिंग सुनिश्चित होती है।
6.2 अपवादों को लॉग करें
त्रुटि संदेशों को लॉग करने से बाद में समस्याओं की पहचान आसान हो जाती है। बड़े पैमाने के अनुप्रयोगों में, अपवादों का रिकॉर्ड रखना डिबगिंग और रखरखाव के लिए अत्यंत महत्वपूर्ण है।
6.3 सुगम गिरावट (Graceful Degradation) लागू करें
सुनिश्चित करें कि अपवाद पूरे प्रोग्राम को क्रैश न करें। उपयोगकर्ता‑मित्र त्रुटि संदेश प्रदर्शित करके या वैकल्पिक कार्य प्रदान करके, आप प्रोग्राम की विश्वसनीयता को बढ़ा सकते हैं।
6.4 अपवादों को निगलने से बचें
अपवादों को पकड़कर कुछ न करना से बचें। इससे डिबगिंग कठिन हो जाती है और अप्रत्याशित व्यवहार हो सकता है। कम से कम, त्रुटि संदेशों को लॉग करें या उचित कार्रवाई करें।
6.5 finally ब्लॉक का उपयोग करें
finally ब्लॉक अपवाद उत्पन्न होने या न होने की परवाह किए बिना निष्पादित होता है। यह फ़ाइलों को बंद करने, संसाधनों को मुक्त करने, या आवश्यक सफ़ाई कार्य करने में उपयोगी है।
try:
file = open("example.txt", "r")
# Read the file
except FileNotFoundError:
print("File not found.")
finally:
file.close()
इस उदाहरण में, भले ही फ़ाइल खोलना विफल हो जाए, finally ब्लॉक यह सुनिश्चित करता है कि फ़ाइल सही ढंग से बंद हो जाए।
7. सारांश
Python में अपवाद हैंडलिंग प्रोग्राम की विश्वसनीयता सुनिश्चित करने और त्रुटियों को प्रभावी ढंग से प्रबंधित करने के लिए आवश्यक है। try और except का उपयोग करके त्रुटियों को पकड़ना और raise के साथ कस्टम अपवाद उठाना कोड की लचीलापन और रखरखाव क्षमता को सुधारता है।
- हमने सीखा कि अपवाद क्या होते हैं और सामान्य प्रकार के अपवादों का अन्वेषण किया।
- हमने
tryऔरexceptका उपयोग करके अपवादों को संभालने के बारे में कवर किया। - हमने एक ही
exceptब्लॉक में कई अपवादों को संभालने को देखा। - हमने
raiseकथन का उपयोग करके अपवाद उठाने के बारे में सीखा। - हमने विस्तृत त्रुटि जानकारी के लिए अपवाद ऑब्जेक्ट्स को प्राप्त करने पर चर्चा की।
- अंत में, हमने प्रभावी त्रुटि हैंडलिंग के लिए सर्वोत्तम अभ्यासों का अन्वेषण किया।
अपवाद हैंडलिंग सॉफ़्टवेयर की विश्वसनीयता सुनिश्चित करने की एक महत्वपूर्ण तकनीक है। इन तकनीकों को लागू करके, आप मजबूत और उपयोगकर्ता‑मित्र Python अनुप्रयोग विकसित कर सकते हैं।




