try/except/else/finally से पूर्वानुमेय विफलताओं को पकड़ें और अमान्य डेटा का संकेत देने के लिए अपने खुद के अपवाद उठाएँ।
इस पाठ को Kodokon में खोलेंएक वास्तविक प्रोग्राम विफल होता है: गायब फ़ाइल, अमान्य इनपुट, टूटा हुआ नेटवर्क। Python इन स्थितियों का संकेत अपवाद से देता है, जो निष्पादन बाधित करते हैं और कॉल स्टैक में ऊपर की ओर तब तक फैलते हैं जब तक कोई try/except उन्हें पकड़ न ले। पेशेवर प्रतिवर्त: जितना संभव हो उतना विशिष्ट अपवाद पकड़ें, उस जगह के जितना संभव हो उतना पास जहाँ आप जानते हैं कि क्या करना है।
def parse_age(text):
try:
return int(text)
except ValueError:
return None
print(parse_age("34")) # 34
print(parse_age("thirty")) # Noneपूरे ब्लॉक की चार शाखाएँ होती हैं। try में जोखिम वाला कोड होता है, except विफलता को संभालता है, else केवल तभी चलता है जब कोई अपवाद न उठा हो, और finally हर स्थिति में चलता है - किसी संसाधन को मुक्त करने या लॉग करने के लिए आदर्श। else का मतलब यही है: try को न्यूनतम रखें, ताकि आप एक नज़र में देख सकें कि कौन सी लाइन विफल हो सकती है।
values = ["10", "abc", "25"]
total = 0
for value in values:
try:
number = int(value)
except ValueError:
print(f"Skip : {value}")
else:
total += number
finally:
print(f"Process : {value}")
print(total) # 35आपके फ़ंक्शन भी raise से अपने खुद के अपवाद उठा सकते हैं, जैसे ही प्राप्त कोई डेटा अमान्य हो: गलत परिणाम देने से बेहतर है कि एक स्पष्ट संदेश के साथ तुरंत विफल हो जाएँ। Exception से विरासत पाती हुई एक समर्पित क्लास परिभाषित करें: कॉल करने वाला उसे विशेष रूप से पकड़ सकेगा, बिना गलती से दूसरी त्रुटियाँ रोके।
class EmptyCartError(Exception):
pass
def checkout(items):
if not items:
raise EmptyCartError("Empty cart.")
return round(sum(items), 2)
try:
print(checkout([]))
except EmptyCartError as error:
print(f"Error : {error}")