जब हम प्रोग्राम लिखते हैं, तो अक्सर ऐसी स्थितियाँ आती हैं जहाँ कुछ शर्तों के कारण प्रोग्राम के सामान्य निष्पादन प्रवाह को बदलने की आवश्यकता होती है। ऐसी परिस्थितियों को संभालने के लिए Python हमें अपवादों (exceptions) की सुविधा प्रदान करता है। अपवाद ऐसे घटनाक्रम हैं जो प्रोग्राम के नियंत्रण प्रवाह को संशोधित कर सकते हैं। Python में, आप अपने प्रोग्राम में कहीं भी raise स्टेटमेंट का उपयोग करके मैन्युअली एक अपवाद उत्पन्न कर सकते हैं।
raise स्टेटमेंट के उपयोग का एक सरल उदाहरण यहाँ है:
x = -1
if x < 0:
# यदि x नकारात्मक है तो एक अपवाद उठाएँ
raise Exception('x should not be negative')
इस प्रोग्राम में, यदि x का मान 0 से कम है, तो "x should not be negative" संदेश के साथ Exception प्रकार का एक अपवाद उठाया जाता है। यदि आप इस प्रोग्राम को चलाते हैं, तो यह raise स्टेटमेंट पर रुक जाएगा और अपवाद संदेश इस प्रकार प्रदर्शित करेगा:
Exception: x should not be negative
Exception के अलावा, Python में कई बिल्ट-इन अपवाद होते हैं जिनका उपयोग आप और विशिष्ट प्रकार की त्रुटियाँ उठाने के लिए कर सकते हैं। यहाँ आप कैसे एक ValueError उठा सकते हैं:
def sqrt(n):
if n < 0:
# यदि n नकारात्मक है तो एक ValueError उठाएँ
raise ValueError('Square root not defined for negative numbers')
return n ** 0.5
print(sqrt(4)) # 2.0
print(sqrt(-1)) # ValueError: Square root not defined for negative numbers
इस उदाहरण में, फ़ंक्शन sqrt(n) संख्या n का वर्गमूल निकालने का प्रयास करता है। लेकिन यदि n नकारात्मक है, तो यह एक विशेष संदेश के साथ ValueError उठाता है।
ध्यान दें कि जब आप एक अपवाद raise करते हैं, तो प्रोग्राम का प्रवाह बाधित हो जाता है। यह अक्सर वांछित व्यवहार होता है, क्योंकि यह संकेत करता है कि कुछ अप्रत्याशित हुआ है जिसे प्रोग्राम संभाल नहीं सकता। विशिष्ट अपवाद का प्रकार और संदेश त्रुटि की प्रकृति के बारे में अधिक जानकारी प्रदान करते हैं।
चुनौती: फ़ाइल रीडर
एक बड़े सॉफ़्टवेयर फर्म में, एक डायरेक्टरी में कई कोड फ़ाइलें हैं। आपसे एक ऐसा Python फ़ंक्शन लिखने के लिए कहा गया है जो एक फ़ाइल खोलता है और उसकी सामग्री लौटाता है। लेकिन इसे उन मामलों को भी संभालना चाहिए जब कोई फ़ाइल मौजूद नहीं है।
फ़ंक्शन का इनपुट फ़ाइल का नाम है।
फ़ंक्शन को फ़ाइल की सामग्री पढ़कर लौटानी चाहिए। यदि फ़ाइल मौजूद नहीं है, तो इसे FileNotFoundError उठाना चाहिए।