మాడ్యూల్ పాఠాలు (4/4)
నిర్వహణ లోపం: ప్రయత్నించండి/తప్ప
రన్టైమ్లో ఏదైనా తప్పు జరిగినప్పుడు (సున్నా ద్వారా విభజన, తప్పిపోయిన కీ, an
అననుకూల రకాలపై ఆపరేషన్) పైథాన్ మినహాయింపుని పెంచుతుంది. లేకుండా
నిర్వహణ, మినహాయింపు ప్రోగ్రామ్కు అంతరాయం కలిగిస్తుంది. 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'ని `ఫలితం`కి కేటాయించండి; లేకుంటే నంబర్ కేటాయించండి. `ఫలితాన్ని` మూల్యాంకనం చేయండి.
సూచనను చూపించు
int('abc') ValueErrorని పెంచుతుంది.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
'డివైడ్(ఎ, బి)`ని నిర్వచించండి, ఇది a/bని అందిస్తుంది, అయితే 'డివైజర్ జీరో' అనే సందేశంతో విలువలోపాన్ని పెంచుతుంది, అయితే b 0 అయితే డివైడ్ (10, 0)కి కాల్ చేయండి/తప్పగా క్యాచ్ చేసిన మినహాయింపు స్ట్రింగ్ను `సందేశం`కి కేటాయించండి.
సూచనను చూపించు
ఫంక్షన్ లోపల ValueError('...') పెంచండి; e వలె ValueError మినహా పట్టుకోండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
అదనపు సవాలు
స్ట్రింగ్ \`text_val = "abc"\`ని పూర్ణాంకానికి మార్చడానికి \`try-except\` బ్లాక్ని వ్రాయండి. మార్పిడి \`విలువ లోపం\`ని పెంచినట్లయితే, \`ఫలితం\`కి \`ఏదీ లేదు\`ని కేటాయించండి. లేకపోతే, మార్చబడిన నంబర్ను కేటాయించండి. చివరగా, \`ఫలితాన్ని\` మూల్యాంకనం చేయండి.
సూచనను చూపించు
విలువ లోపం మినహా ప్రయత్నించండి: ఫలితం = int(text_val)ని ఉపయోగించండి: ఫలితం = ఏదీ లేదు.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది