Python izņēmumu apstrāde

Python izņēmumu apstrāde

Mēs esam izpētījuši pamata python līdz šim no 1. līdz 4. komplektam ( 1. komplekts | 2. komplekts | 3. komplekts | 4. komplekts ).

Šajā rakstā mēs apspriedīsim, kā rīkoties ar izņēmumiem Python, izmantojot try, izņemot un visbeidzot paziņojumus, izmantojot atbilstošus piemērus.

Python kļūdas var būt divu veidu, t.i. Sintakses kļūdas un izņēmumi . Kļūdas ir problēmas programmā, kuru dēļ programma pārtrauks izpildi. No otras puses, izņēmumi tiek izvirzīti, ja notiek daži iekšēji notikumi, kas maina parasto programmas plūsmu.

Dažāda veida izņēmumi programmā python:

Programmā Python ir vairāki iebūvēti Python izņēmumi, kas var tikt parādīti, ja programmas izpildes laikā rodas kļūda. Šeit ir daži no visizplatītākajiem Python izņēmumu veidiem:

  • Sintakses kļūda: Šis izņēmums tiek parādīts, ja tulks kodā saskaras ar sintakses kļūdu, piemēram, kļūdaini uzrakstītu atslēgvārdu, trūkstošu kolu vai nelīdzsvarotu iekava.
  • Tipa kļūda : Šis izņēmums tiek parādīts, ja nepareiza veida objektam tiek piemērota darbība vai funkcija, piemēram, veselam skaitlim pievienojot virkni.
  • NameError : Šis izņēmums tiek parādīts, ja mainīgā vai funkcijas nosaukums nav atrasts pašreizējā tvērumā.
  • Indeksa kļūda : šis izņēmums tiek palielināts, ja indekss ir ārpus saraksta, koreža vai cita veida secības diapazona.
  • KeyError : šis izņēmums tiek parādīts, ja vārdnīcā atslēga netiek atrasta.
  • ValueError : Šis izņēmums tiek parādīts, ja funkcija vai metode tiek izsaukta ar nederīgu argumentu vai ievadi, piemēram, mēģinot pārvērst virkni par veselu skaitli, ja virkne neatspoguļo derīgu veselu skaitli.
  • Atribūta kļūda : Šis izņēmums tiek parādīts, ja objektā netiek atrasts atribūts vai metode, piemēram, mēģinot piekļūt neeksistējošam klases instances atribūtam.
  • IOError : Šis izņēmums tiek parādīts, ja ievades/izvades darbība, piemēram, faila lasīšana vai rakstīšana, neizdodas ievades/izvades kļūdas dēļ.
  • ZeroDivision Error : Šis izņēmums tiek palielināts, ja mēģina dalīt skaitli ar nulli.
  • Importēšanas kļūda : Šis izņēmums tiek parādīts, ja importēšanas priekšraksts nevar atrast vai ielādēt moduli.

Šie ir tikai daži piemēri no daudzajiem izņēmumu veidiem, kas var rasties Python. Ir svarīgi pareizi apstrādāt izņēmumus savā kodā, izmantojot try-izņemot blokus vai citus kļūdu apstrādes paņēmienus, lai graciozi apstrādātu kļūdas un novērstu programmas avāriju.

Atšķirība starp sintakses kļūdu un izņēmumiem

Sintakses kļūda: Kā norāda nosaukums, šo kļūdu izraisa nepareiza koda sintakse. Tas noved pie programmas pārtraukšanas.

Piemērs:

Kodā ir sintakses kļūda. The ' if'> aiz paziņojuma jāraksta kols ( :> ), un ' print'> paziņojumam jābūt atkāpei, lai tas būtu iekšpusē ' if'> bloķēt.

Python3




amount> => 10000> if> (amount>>> )>

Izvade:

Izņēmumi: Izņēmumi tiek radīti, ja programma ir sintaktiski pareiza, bet kods rada kļūdu. Šī kļūda neaptur programmas izpildi, tomēr izmaina parasto programmas plūsmu.

Piemērs:

Šeit šajā kodā a s mēs sadalām 'atzīmes' par nulli, tāpēc radīsies kļūda, kas pazīstama kā “ZeroDivisionError”

Python3




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

Izvade:

Iepriekš minētajā piemērā tika paaugstināta ZeroDivisionError, jo mēs cenšamies dalīt skaitli ar 0.

Piezīme: Izņēmums ir pamatklase visiem Python izņēmumiem. Varat pārbaudīt izņēmumu hierarhiju šeit .

Piemērs:

1) Type Error: šis izņēmums tiek parādīts, ja nepareiza veida objektam tiek piemērota darbība vai funkcija. Šeit ir piemērs:
Šeit a 'Type Error' tiek paaugstināts, jo abi datu tipi ir atšķirīgi, kas tiek pievienoti.

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' 

mēģiniet noķert bloku, lai to atrisinātu:

Kods mēģina pievienot veselu skaitli ( ' x'> ) un virkni ( ' y'> ) kopā, kas nav derīga darbība, un tas paaugstinās a ' TypeError'> . Kods tika izmantots a ' try'> un ' except'> bloķēt, lai uztvertu šo izņēmumu un izdrukātu kļūdas ziņojumu.

Python3




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

Izvade

Error: cannot add an int and a str 

Izmēģiniet un izņemiet paziņojumu — izņēmumu ievērošana

Izmēģināt un izņemot paziņojumus izmanto, lai uztvertu un apstrādātu izņēmumus Python. Paziņojumi, kas var radīt izņēmumus, tiek glabāti try klauzulā, un paziņojumi, kas apstrādā izņēmumu, tiek rakstīti iekšpusē, izņemot klauzulu.

Piemērs: Šeit mēs cenšamies piekļūt masīva elementam, kura indekss nav saistīts, un apstrādāt atbilstošo izņēmumu.

Python3




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

Izvade

Second element = 2 An error occurred 

Iepriekš minētajā piemērā paziņojumi, kas var izraisīt kļūdu, ir ievietoti try priekšrakstā (mūsu gadījumā – otrajā izdrukā). Otrais drukāšanas paziņojums mēģina piekļūt saraksta ceturtajam elementam, kas tur nav, un tas rada izņēmumu. Pēc tam šis izņēmums attiecas uz izņēmuma paziņojumu.

Īpaša izņēmuma ķeršana

Try priekšrakstam var būt vairāk nekā viens, izņemot klauzulu, lai norādītu apstrādātājus dažādiem izņēmumiem. Lūdzu, ņemiet vērā, ka tiks izpildīts ne vairāk kā viens apstrādātājs. Piemēram, iepriekš minētajā kodā varam pievienot IndexError. Vispārējā sintakse konkrētu izņēmumu pievienošanai ir:

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

Piemērs: Īpašu izņēmumu uztveršana Python

Kods definē funkciju ' fun(a)'> kas aprēķina b> pamatojoties uz ievadi a> . Ja a> ir mazāks par 4, tas mēģina dalīt ar nulli, izraisot a ' ZeroDivisionError'> . Kods izsauc fun(3)> un fun(5)> blokā try-izņemot. Tas apstrādā ZeroDivisionError> priekš fun(3)> un izdrukas ZeroDivision Error radās un tika apstrādāta. The ' NameError'> bloks netiek izpildīts, jo tādu nav ' NameError'> izņēmumi kodā.

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'> )>

Izvade

ZeroDivisionError Occurred and Handled 

Ja komentējat rindiņu fun(3), rezultāts būs

NameError Occurred and Handled 

Iepriekš minētā izvade ir tāda, jo, tiklīdz python mēģina piekļūt b vērtībai, notiek NameError.

Mēģiniet ar Else Clause

Programmā Python blokā try-except varat izmantot arī klauzulu else, kurai jābūt klāt pēc visām izņēmuma klauzulām. Kods ievada else bloku tikai tad, ja try klauzula neizraisa izņēmumu.

Mēģiniet ar citu klauzulu

Kods definē funkciju AbyB(a, b)> kas aprēķina c> kā ((a+b) / (a-b)) un apstrādā potenciālu ZeroDivisionError> . Tas izdrukā rezultātu, ja nav dalījuma ar nulli kļūdas. Zvana AbyB(2.0, 3.0)> aprēķina un izdrukā -5.0> , zvanot AbyB(3.0, 3.0)> mēģina dalīt ar nulli, kā rezultātā a ZeroDivisionError> , kas ir nozvejotas un a/b rezultāts ir 0 ir izdrukāts.

Python3




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> )>

Izvade:

-5.0 a/b result in 0 

Visbeidzot, atslēgvārds Python

Python nodrošina atslēgvārdu beidzot , kas vienmēr tiek izpildīts pēc mēģinājuma un izņemot blokus. Pēdējais bloks vienmēr tiek izpildīts pēc parastā try bloka pārtraukšanas vai pēc tam, kad mēģinājuma bloks beidzas kāda izņēmuma dēļ.

Sintakse:

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

Piemērs:

Kods mēģina veikt veselu skaitļu dalīšanu ar nulli, kā rezultātā a ZeroDivisionError> . Tas uztver izņēmumu un izdrukā Nevar dalīt ar nulli. Neatkarīgi no izņēmuma, finally> bloks tiek izpildīts un izdrukāts Tas vienmēr tiek izpildīts.

Python3




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

Izvade:

Can't divide by zero This is always executed 

Izņēmuma paaugstināšana

The izvirzīt paziņojumu ļauj programmētājam piespiest veikt īpašu izņēmumu. Vienīgais izvirzītais arguments norāda uz izņēmumu, kas jāizvirza. Tam ir jābūt izņēmuma gadījumam vai izņēmuma klasei (klasei, kas izriet no izņēmuma).

Šis kods apzināti rada a NameError> ar ziņu Sveiki izmantojot raise> paziņojums sadaļā a try> bloķēt. Tad tas nozvejas NameError> izņēmums, izdrukas Izņēmums, un atkārtoti paaugstina to pašu izņēmumu, izmantojot raise> . Tas parāda, kā Python var radīt un apstrādāt izņēmumus, ļaujot saņemt pielāgotus kļūdu ziņojumus un tālāk izplatīt izņēmumus.

Python3




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

Iepriekš minētā koda izvade vienkārši tiks izdrukāta kā izņēmums, taču izpildlaika kļūda tiks parādīta arī pēdējā rindiņā, jo pēdējā rindā tiek parādīts paaugstināšanas paziņojums. Tātad izvade komandrindā izskatīsies šādi

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

Izņēmuma apstrādes priekšrocības:

  • Uzlabota programmas uzticamība : pareizi rīkojoties ar izņēmumiem, varat novērst programmas avāriju vai nepareizu rezultātu rašanos neparedzētu kļūdu vai ievades dēļ.
  • Vienkāršota kļūdu apstrāde : Izņēmumu apstrāde ļauj atdalīt kļūdu apstrādes kodu no galvenās programmas loģikas, tādējādi atvieglojot koda lasīšanu un uzturēšanu.
  • Apkopēja kods: Izņemot apstrādi ar izņēmumiem, varat izvairīties no sarežģītu nosacījumu priekšrakstu izmantošanas, lai pārbaudītu kļūdas, tādējādi nodrošinot tīrāku un lasāmāku kodu.
  • Vieglāka atkļūdošana : Ja tiek parādīts izņēmums, Python tulks izdrukā izsekošanas datu, kas parāda precīzu izņēmuma atrašanās vietu, tādējādi atvieglojot koda atkļūdošanu.

Izņēmuma apstrādes trūkumi:

  • Veiktspējas pieskaitāmās izmaksas: Izņēmumu apstrāde var būt lēnāka nekā nosacījumu priekšrakstu izmantošana kļūdu pārbaudei, jo tulkam ir jāveic papildu darbs, lai uztvertu un apstrādātu izņēmumu.
  • Paaugstināta koda sarežģītība : Izņēmumu apstrāde var padarīt jūsu kodu sarežģītāku, īpaši, ja jums ir jāapstrādā vairāki izņēmumu veidi vai jāievieš sarežģīta kļūdu apstrādes loģika.
  • Iespējamie drošības riski: Nepareizi apstrādāti izņēmumi var atklāt sensitīvu informāciju vai radīt drošības ievainojamības jūsu kodā, tāpēc ir svarīgi rūpīgi rīkoties ar izņēmumiem un izvairīties no pārāk daudz informācijas par programmu.

Kopumā Python izņēmumu apstrādes priekšrocības ir lielākas par trūkumiem, taču ir svarīgi to izmantot saprātīgi un uzmanīgi, lai saglabātu koda kvalitāti un programmas uzticamību.

Šī raksta autors ir Nikhils Kumars Singhs (nickzuck_007)