ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 2 · 4లో పాఠం 4కోర్సులో 8/36~12 min
మాడ్యూల్ పాఠాలు (4/4)

నిర్వహణ లోపం: ప్రయత్నించండి/తప్ప

రన్‌టైమ్‌లో ఏదైనా తప్పు జరిగినప్పుడు (సున్నా ద్వారా విభజన, తప్పిపోయిన కీ, an అననుకూల రకాలపై ఆపరేషన్) పైథాన్ మినహాయింపుని పెంచుతుంది. లేకుండా నిర్వహణ, మినహాయింపు ప్రోగ్రామ్‌కు అంతరాయం కలిగిస్తుంది. try / exceptతో మీరు దాన్ని పట్టుకుని ఏమి చేయాలో నిర్ణయించుకోవచ్చు.

ప్రాథమిక రూపం

Python
try:
    risultato = 10 / 0
except ZeroDivisionError:
    risultato = None
risultato  # None
  • try: బ్లాక్ విఫలమయ్యే కోడ్‌ని కలిగి ఉంది;
  • except <ErrorType>: ఆ లోపం రకాన్ని పెంచినట్లయితే మాత్రమే అమలు చేయబడుతుంది try లోపల.

మినహాయింపు సందేశాన్ని క్యాచ్ చేస్తోంది

మినహాయింపు ఆబ్జెక్ట్‌ని పేరుకు బంధించడానికి asని ఉపయోగించండి:

Python
try:
    int("non è un numero")
except ValueError as e:
    messaggio = str(e)
messaggio  # "invalid literal for int() with base 10: 'non è un numero'"

కలిసి అనేక రకాలు

Python
try:
    valore = dati[chiave]
except (KeyError, IndexError):
    valore = None

ఆ రకాల్లో (లేదా సబ్‌క్లాస్‌లు) ఏవైనా మినహాయింపులను క్యాచ్ చేసే రకాలు.

పూర్తి నిర్మాణం: ప్రయత్నించండి / తప్ప / లేకపోతే / చివరకు

Python
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 exception
  • else — try విజయంపై ఆధారపడి ఉండే కోడ్ కోసం దీన్ని ఉపయోగించండి. ఉంచుకో వేరు కాబట్టి మీరు అనుకోకుండా సంబంధం లేని మినహాయింపులను పొందలేరు.
  • finally — ఎల్లప్పుడూ జరగవలసిన శుభ్రత (ఫైల్‌ను మూసివేయడం, విడుదల చేయడం వనరు). విజయంపైనా మరియు లోపంపైనా అమలు చేయబడింది.

మినహాయింపును పెంచడం: raise

కొన్నిసార్లు మీరు ఏదో తప్పు జరిగిందని సంకేతాలు ఇవ్వాలనుకుంటున్నారు:

Python
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: మినహాయింపు సంభవించిందా అనే దానితో సంబంధం లేకుండా ఎల్లప్పుడూ అమలు చేయబడుతుంది. వనరులను శుభ్రపరచడానికి ఇది అనువైనది (ఉదా. ఓపెన్ ఫైల్ లేదా డేటాబేస్ కనెక్షన్‌ని మూసివేయడం).

మీరే ప్రయత్నించండి

వ్యాయామం#python.m2.l4.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

Int('abc')ని ప్రయత్నించే వ్యక్తీకరణను వ్రాయండి: ValueError పెంచబడినట్లయితే, స్ట్రింగ్ 'errore'ని `ఫలితం`కి కేటాయించండి; లేకుంటే నంబర్ కేటాయించండి. `ఫలితాన్ని` మూల్యాంకనం చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

int('abc') ValueErrorని పెంచుతుంది.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#python.m2.l4.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

'డివైడ్(ఎ, బి)`ని నిర్వచించండి, ఇది a/bని అందిస్తుంది, అయితే 'డివైజర్ జీరో' అనే సందేశంతో విలువలోపాన్ని పెంచుతుంది, అయితే b 0 అయితే డివైడ్ (10, 0)కి కాల్ చేయండి/తప్పగా క్యాచ్ చేసిన మినహాయింపు స్ట్రింగ్‌ను `సందేశం`కి కేటాయించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ఫంక్షన్ లోపల ValueError('...') పెంచండి; e వలె ValueError మినహా పట్టుకోండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

అదనపు సవాలు

వ్యాయామం#python.m2.l4.e3
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

స్ట్రింగ్ \`text_val = "abc"\`ని పూర్ణాంకానికి మార్చడానికి \`try-except\` బ్లాక్‌ని వ్రాయండి. మార్పిడి \`విలువ లోపం\`ని పెంచినట్లయితే, \`ఫలితం\`కి \`ఏదీ లేదు\`ని కేటాయించండి. లేకపోతే, మార్చబడిన నంబర్‌ను కేటాయించండి. చివరగా, \`ఫలితాన్ని\` మూల్యాంకనం చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

విలువ లోపం మినహా ప్రయత్నించండి: ఫలితం = int(text_val)ని ఉపయోగించండి: ఫలితం = ఏదీ లేదు.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది