logo

Gestionarea excepțiilor Python

Am explorat pythonul de bază până acum de la Setul 1 la 4 ( Setul 1 | Setul 2 | Setul 3 | Setul 4 ).

În acest articol, vom discuta despre cum să gestionăm excepțiile în Python folosind instrucțiuni try, except și, în final, cu ajutorul exemplelor adecvate.



Eroarea în Python poate fi de două tipuri, adică Erori de sintaxă și excepții . Erorile sunt probleme dintr-un program din cauza cărora programul va opri execuția. Pe de altă parte, sunt ridicate excepții atunci când apar anumite evenimente interne care modifică fluxul normal al programului.

Diferite tipuri de excepții în python:

În Python, există câteva excepții Python încorporate care pot fi ridicate atunci când apare o eroare în timpul execuției unui program. Iată câteva dintre cele mai comune tipuri de excepții în Python:

  • Eroare de sintaxă: Această excepție este ridicată atunci când interpretul întâlnește o eroare de sintaxă în cod, cum ar fi un cuvânt cheie scris greșit, două puncte lipsă sau o paranteză dezechilibrată.
  • Eroare de scris : Această excepție este ridicată atunci când o operație sau o funcție este aplicată unui obiect de tip greșit, cum ar fi adăugarea unui șir la un număr întreg.
  • NameErrore : Această excepție este ridicată atunci când o variabilă sau un nume de funcție nu este găsit în domeniul curent.
  • IndexError : Această excepție este ridicată atunci când un index este în afara intervalului pentru o listă, tuplu sau alte tipuri de secvență.
  • KeyError : Această excepție este ridicată atunci când o cheie nu este găsită într-un dicționar.
  • ValueError : Această excepție este ridicată atunci când o funcție sau o metodă este apelată cu un argument sau o intrare nevalid, cum ar fi încercarea de a converti un șir într-un număr întreg când șirul nu reprezintă un număr întreg valid.
  • AttributeError : Această excepție este ridicată atunci când un atribut sau o metodă nu este găsită pe un obiect, cum ar fi încercarea de a accesa un atribut inexistent al unei instanțe de clasă.
  • IOEroare : Această excepție este ridicată atunci când o operație I/O, cum ar fi citirea sau scrierea unui fișier, eșuează din cauza unei erori de intrare/ieșire.
  • ZeroDivisionError : Această excepție este ridicată atunci când se încearcă împărțirea unui număr la zero.
  • ImportError : Această excepție este ridicată atunci când o instrucțiune de import nu reușește să găsească sau să încarce un modul.

Acestea sunt doar câteva exemple din numeroasele tipuri de excepții care pot apărea în Python. Este important să gestionați corect excepțiile din codul dvs. folosind blocuri try-except sau alte tehnici de gestionare a erorilor, pentru a gestiona cu grație erorile și pentru a preveni blocarea programului.



Diferența dintre eroare de sintaxă și excepții

Eroare de sintaxă: După cum sugerează și numele, această eroare este cauzată de sintaxa greșită din cod. Aceasta duce la terminarea programului.

Exemplu:

Există o eroare de sintaxă în cod. The ' if'> declarația ar trebui să fie urmată de două puncte (:>), si ' print'> declarația ar trebui să fie indentată pentru a fi în interiorul ' if'> bloc.



Python3




amount>=> 10000> if>(amount>>>>)> print>(>'You are eligible to purchase Dsa Self Paced'>)>

>

în java
>

Ieșire:

Excepții: Sunt ridicate excepții atunci când programul este corect din punct de vedere sintactic, dar codul are ca rezultat o eroare. Această eroare nu oprește execuția programului, dar schimbă fluxul normal al programului.

Exemplu:

Aici, în acest cod, împărțim „semne” cu zero, astfel încât va apărea o eroare cunoscută ca „ZeroDivisionError”

Python3




marks>=> 10000> a>=> marks>/> 0> print>(a)>

>

>

Ieșire:

În exemplul de mai sus, a apărut ZeroDivisionError deoarece încercăm să împărțim un număr la 0.

Notă: Excepția este clasa de bază pentru toate excepțiile din Python. Puteți verifica ierarhia excepțiilor Aici .

Exemplu:

1) TypeError: Această excepție este ridicată atunci când o operație sau o funcție este aplicată unui obiect de tip greșit. Iată un exemplu:
Aici a 'Eroare de scris' este ridicat deoarece ambele tipuri de date sunt diferite care sunt adăugate.

Python3




x>=> 5> y>=> 'hello'> z>=> x>+> y>

>

>

output:  Traceback (most recent call last):  File '7edfa469-9a3c-4e4d-98f3-5544e60bff4e.py', line 4, in   z = x + y TypeError: unsupported operand type(s) for +: 'int' and 'str'>

încercați catch block pentru a o rezolva:

Codul încearcă să adauge un număr întreg ( ' x'> ) și un șir ( ' y'> ) împreună, ceea ce nu este o operațiune validă și va ridica a ' TypeError'> . Codul folosit a ' try'> și ' except'> blocați pentru a detecta această excepție și pentru a imprima un mesaj de eroare.

Python3




x>=> 5> y>=> 'hello'> try>:> >z>=> x>+> y> except> TypeError:> >print>(>'Error: cannot add an int and a str'>)>

>

>

Ieșire

Error: cannot add an int and a str>

Declarația Try and Except – Prinderea excepțiilor

Instrucțiunile Try and except sunt folosite pentru a captura și gestiona excepțiile în Python. Instrucțiunile care pot genera excepții sunt păstrate în clauza try, iar instrucțiunile care gestionează excepția sunt scrise în clauza except.

Exemplu: Aici încercăm să accesăm elementul de matrice al cărui index este în afara limitelor și să gestionăm excepția corespunzătoare.

Python3




a>=> [>1>,>2>,>3>]> try>:> >print> (>'Second element = %d'> %>(a[>1>]))> >print> (>'Fourth element = %d'> %>(a[>3>]))> except>:> >print> (>'An error occurred'>)>

>

>

Ieșire

Second element = 2 An error occurred>

În exemplul de mai sus, instrucțiunile care pot provoca eroarea sunt plasate în interiorul instrucțiunii try (a doua instrucțiune print în cazul nostru). A doua instrucțiune de tipărire încearcă să acceseze al patrulea element al listei care nu este acolo și aceasta aruncă o excepție. Această excepție este apoi prinsă de declarația except.

Prinderea unei excepții specifice

O instrucțiune try poate avea mai multe clauze except, pentru a specifica handlere pentru diferite excepții. Vă rugăm să rețineți că cel mult un handler va fi executat. De exemplu, putem adăuga IndexError în codul de mai sus. Sintaxa generală pentru adăugarea unor excepții specifice este:

try:  # statement(s) except IndexError:  # statement(s) except ValueError:  # statement(s)>

Exemplu: Prinderea unor excepții specifice în Python

Codul definește o funcție ' fun(a)'> care calculeazăb>pe baza intrăriia>. Dacăa>este mai mică de 4, încearcă o împărțire la zero, determinând a ' ZeroDivisionError'> . Apelurile de codfun(3)>șifun(5)>în interiorul unui bloc try-except. Se ocupă deZeroDivisionError>pentrufun(3)>și imprimeuri ZeroDivisionError a apărut și gestionat. The ' NameError'> bloc nu este executat deoarece nu există ' NameError'> excepții din cod.

Python3




def> fun(a):> >if> a <>4>:> >b>=> a>/>(a>->3>)> >print>(>'Value of b = '>, b)> > try>:> >fun(>3>)> >fun(>5>)> except> ZeroDivisionError:> >print>(>'ZeroDivisionError Occurred and Handled'>)> except> NameError:> >print>(>'NameError Occurred and Handled'>)>

>

>

Ieșire

ZeroDivisionError Occurred and Handled>

Dacă comentați linia fun(3), rezultatul va fi

NameError Occurred and Handled>

Ieșirea de mai sus este așa, deoarece de îndată ce python încearcă să acceseze valoarea lui b, apare NameError.

Încercați cu clauza Else

În Python, puteți folosi și clauza else din blocul try-except, care trebuie să fie prezent după toate clauzele except. Codul intră în blocul else numai dacă clauza try nu ridică o excepție.

Încercați cu clauza else

Codul definește o funcție AbyB(a, b)> care calculeazăc>ca ((a+b) / (a-b)) și se ocupă de un potențialZeroDivisionError>. Tipărește rezultatul dacă nu există o eroare de împărțire cu zero. Apel AbyB(2.0, 3.0)> calculează și imprimă-5.0>, în timp ce sunați AbyB(3.0, 3.0)> încearcă să împartă la zero, rezultând a ZeroDivisionError> , care este prins si a/b are ca rezultat 0 este tipărită.

Python3

material unghiular




def> AbyB(a , b):> >try>:> >c>=> ((a>+>b)>/> (a>->b))> >except> ZeroDivisionError:> >print> (>'a/b result in 0'>)> >else>:> >print> (c)> AbyB(>2.0>,>3.0>)> AbyB(>3.0>,>3.0>)>

>

>

Ieșire:

-5.0 a/b result in 0>

În sfârșit, cuvânt cheie în Python

Python oferă un cuvânt cheie in cele din urma , care este întotdeauna executat după blocurile try și except. Blocul final se execută întotdeauna după terminarea normală a blocului try sau după ce blocul try se termină din cauza unor excepții.

Sintaxă:

try:  # Some Code....   except:  # optional block  # Handling of exception (if required)  else:  # execute if no exception  finally:  # Some code .....(always executed)>

Exemplu:

Codul încearcă să efectueze împărțirea întregului la zero, rezultând a ZeroDivisionError> . Prinde excepția și imprimă Nu se poate împărți la zero. Indiferent de excepție, celfinally>blocul este executat și se tipărește Acesta este întotdeauna executat.

Python3




try>:> >k>=> 5>/>/>0> >print>(k)> except> ZeroDivisionError:> >print>(>'Can't divide by zero'>)> finally>:> >print>(>'This is always executed'>)>

>

>

Ieșire:

Can't divide by zero This is always executed>

Creșterea excepției

The ridică declarația permite programatorului să forțeze să apară o anumită excepție. Singurul argument din raise indică excepția care trebuie ridicată. Aceasta trebuie să fie fie o instanță de excepție, fie o clasă de excepție (o clasă care derivă din Exception).

Acest cod ridică în mod intenționat aNameError>cu mesajul Bună folosindraise>declarație în cadrul atry>bloc. Apoi, prindeNameError>excepție, imprimeuri O exceptie, și ridică din nou aceeași excepție folosindraise>. Aceasta demonstrează modul în care excepțiile pot fi ridicate și gestionate în Python, permițând mesaje de eroare personalizate și propagarea ulterioară a excepțiilor.

Python3




try>:> >raise> NameError(>'Hi there'>)> except> NameError:> >print> (>'An exception'>)> >raise>

>

>

Ieșirea codului de mai sus va fi pur și simplu tipărită ca o excepție, dar o eroare de rulare va apărea și în ultimul din cauza instrucțiunii de ridicare din ultima linie. Deci, rezultatul de pe linia de comandă va arăta ca

Traceback (most recent call last):  File '/home/d6ec14ca595b97bff8d8034bbf212a9f.py', line 5, in   raise NameError('Hi there') # Raise Error NameError: Hi there>

Avantajele gestionării excepțiilor:

  • Fiabilitate îmbunătățită a programului : Prin gestionarea corectă a excepțiilor, puteți preveni blocarea programului sau producerea de rezultate incorecte din cauza unor erori sau intrări neașteptate.
  • Tratarea simplificată a erorilor : Gestionarea excepțiilor vă permite să separați codul de gestionare a erorilor de logica principală a programului, facilitând citirea și întreținerea codului.
  • Cod de curățare: Cu gestionarea excepțiilor, puteți evita utilizarea instrucțiunilor condiționate complexe pentru a verifica erorile, ceea ce duce la un cod mai curat și mai lizibil.
  • Depanare mai ușoară : Când se ridică o excepție, interpretul Python tipărește un traseu care arată locația exactă în care a apărut excepția, facilitând depanarea codului.

Dezavantaje ale gestionării excepțiilor:

  • Performanță generală: Gestionarea excepțiilor poate fi mai lentă decât utilizarea instrucțiunilor condiționate pentru a verifica erorile, deoarece interpretul trebuie să efectueze o muncă suplimentară pentru a captura și gestiona excepția.
  • Creșterea complexității codului : Gestionarea excepțiilor poate face codul mai complex, mai ales dacă trebuie să gestionați mai multe tipuri de excepții sau să implementați o logică complexă de gestionare a erorilor.
  • Riscuri de securitate posibile: Excepțiile gestionate incorect pot dezvălui informații sensibile sau pot crea vulnerabilități de securitate în codul dvs., așa că este important să tratați excepțiile cu atenție și să evitați să expuneți prea multe informații despre programul dvs.

În general, beneficiile gestionării excepțiilor în Python depășesc dezavantajele, dar este important să-l folosiți în mod judicios și cu atenție pentru a menține calitatea codului și fiabilitatea programului.

Acest articol este contribuit de Nikhil Kumar Singh(nickzuck_007)