தொகுதி பாடங்கள் (4/4)
கையாளுவதில் பிழை: முயற்சி/தவிர
இயக்க நேரத்தில் ஏதேனும் தவறு நடந்தால் (பூஜ்ஜியத்தால் வகுத்தல், விடுபட்ட விசை, ஒரு
பொருந்தாத வகைகளில் செயல்பாடு) பைதான் ஒரு விதிவிலக்கு எழுப்புகிறது. இல்லாமல்
கையாளுதல், விதிவிலக்கு நிரலை குறுக்கிடுகிறது. try / except உடன் நீங்கள்
அதைப் பிடித்து என்ன செய்வது என்று முடிவு செய்யலாம்.
அடிப்படை வடிவம்
try:
risultato = 10 / 0
except ZeroDivisionError:
risultato = None
risultato # Nonetry:தொகுதியில் தோல்வியடையும் குறியீடு உள்ளது;- அந்த பிழை வகை உயர்த்தப்பட்டால் மட்டுமே
except <ErrorType>:செயல்படுத்தப்படும்tryஉள்ளே.
விதிவிலக்கு செய்தியைப் பிடிக்கிறது
விதிவிலக்கு பொருளை பெயருடன் இணைக்க as ஐப் பயன்படுத்தவும்:
try:
int("non è un numero")
except ValueError as e:
messaggio = str(e)
messaggio # "invalid literal for int() with base 10: 'non è un numero'"ஒன்றாக பல வகைகள்
try:
valore = dati[chiave]
except (KeyError, IndexError):
valore = Noneஅந்த வகைகளில் (அல்லது துணைப்பிரிவுகள்) ஏதேனும் விதிவிலக்கைப் பிடிக்கும் பல வகைகள்.
முழு அமைப்பு: முயற்சி / தவிர / வேறு / இறுதியாக
try:
n = int("42")
except ValueError:
print("not a number")
else:
print(f"parsed: {n}") # executed only if NO exception occurred
finally:
print("always executed") # executed regardless, even on exceptionelse—tryஇன் வெற்றியைப் பொறுத்துக் குறியீட்டைப் பயன்படுத்தவும். வைத்துக்கொள்ளுங்கள் நீங்கள் தற்செயலாக தொடர்பில்லாத விதிவிலக்குகளைப் பிடிக்க மாட்டீர்கள்.finally— எப்போதும் நிகழ வேண்டிய சுத்தம் (ஒரு கோப்பை மூடுதல், வெளியிடுதல் வளம்). வெற்றியிலும் பிழையிலும் செயல்படுத்தப்பட்டது.
விதிவிலக்கு எழுப்புகிறது: raise
சில சமயங்களில் ஏதோ தவறு நடந்துவிட்டது என்று அடையாளம் காட்ட விரும்புபவர் நீங்கள்:
def diviso(a, b):
if b == 0:
raise ValueError("the divisor cannot be zero")
return a / bநீங்கள் சந்திக்கும் மற்றும் எழுப்பும் மிகவும் பொதுவான உள்ளமைக்கப்பட்ட விதிவிலக்குகள்:
ValueError— மதிப்பு சரியான வகையைக் கொண்டுள்ளது, ஆனால் ஏற்றுக்கொள்ள முடியாதது (எ.கா. பாகுபடுத்துதல்).TypeError— வகை தவறு (எ.கா.len(42)).KeyError/IndexError— விசை/குறியீடு இல்லை.ZeroDivisionError— பூஜ்ஜியத்தால் வகுத்தல்.FileNotFoundError,PermissionError— கோப்பு முறைமை செயல்பாடுகள்.
முயற்சி தொகுதிகளில் மற்ற மற்றும் இறுதியாக உட்பிரிவுகள்
ஒரு try தொகுதி இரண்டு கூடுதல் உட்பிரிவுகளை வரையறுக்கலாம்:
else: விதிவிலக்குகள் எதுவும் இல்லாமல்tryதொகுதி முடிந்தால் மட்டுமே செயல்படுத்தப்படும்.finally: விதிவிலக்கு ஏற்பட்டதா என்பதைப் பொருட்படுத்தாமல் எப்போதும் செயல்படுத்தப்படும். ஆதாரங்களை சுத்தம் செய்வதற்கு இது சிறந்தது (எ.கா. திறந்த கோப்பு அல்லது தரவுத்தள இணைப்பை மூடுவது).
நீங்களே முயற்சி செய்து பாருங்கள்
int('abc') முயற்சிக்கும் ஒரு வெளிப்பாட்டை எழுதவும்: ValueError உயர்த்தப்பட்டால், 'errore' என்ற சரத்தை `result`க்கு ஒதுக்கவும்; இல்லையெனில் எண்ணை ஒதுக்குங்கள். `முடிவை` மதிப்பிடவும்.
குறிப்பைக் காட்டு
int('abc') ValueError ஐ உயர்த்துகிறது.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
`டிவைடு(a, b)` என்பதை வரையறுத்து, a/b ஐத் தருகிறது, ஆனால் b 0 ஆக இருந்தால் 'வகுப்பு பூஜ்ஜியம்' என்ற செய்தியுடன் மதிப்புப் பிழையை உயர்த்துகிறது. பிறகு ஒரு முயற்சியில்/தவிர வகுப்பிற்குள் (10, 0) அழைக்கவும் மற்றும் பிடிபட்ட விதிவிலக்கின் சரத்தை `செய்தி` அனுப்பவும்.
குறிப்பைக் காட்டு
செயல்பாட்டின் உள்ளே ValueError('...') ஐ உயர்த்தவும்; e என ValueError தவிர பிடிக்கவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
கூடுதல் சவால்
\`text_val = "abc"\` சரத்தை முழு எண்ணாக மாற்ற \`try-except\` block ஐ எழுதவும். மாற்றமானது \`மதிப்புப் பிழை\`யை உயர்த்தினால், \`முடிவு\`க்கு \`ஒன்றுமில்லை\` என்பதை ஒதுக்கவும். இல்லையெனில், மாற்றப்பட்ட எண்ணை ஒதுக்கவும். இறுதியாக, \`முடிவை\` மதிப்பிடவும்.
குறிப்பைக் காட்டு
முயற்சி: முடிவு = int(text_val) ஐப் பயன்படுத்தவும், மதிப்புப் பிழையைத் தவிர: முடிவு = எதுவுமில்லை.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்