logo

Obravnava izjem Python

Do zdaj smo raziskali osnovni python od sklopa 1 do 4 ( Komplet 1 | Komplet 2 | Komplet 3 | Komplet 4 ).

V tem članku bomo s pomočjo ustreznih primerov razpravljali o tem, kako obravnavati izjeme v Pythonu z uporabo stavkov poskusi, razen in končno.

Napaka v Pythonu je lahko dveh vrst, tj. Sintaksne napake in izjeme . Napake so težave v programu, zaradi katerih bo program ustavil izvajanje. Po drugi strani pa se pojavijo izjeme, ko pride do nekaterih notranjih dogodkov, ki spremenijo običajni potek programa.



Različne vrste izjem v pythonu:

V Pythonu obstaja več vgrajenih izjem Python, ki jih je mogoče sprožiti, ko pride do napake med izvajanjem programa. Tukaj je nekaj najpogostejših vrst izjem v Pythonu:

  • SyntaxError: Ta izjema se sproži, ko tolmač naleti na sintaktično napako v kodi, kot je napačno črkovana ključna beseda, manjkajoče dvopičje ali neuravnotežen oklepaj.
  • TypeError : Ta izjema se sproži, ko se operacija ali funkcija uporabi za objekt napačne vrste, na primer dodajanje niza celemu številu.
  • NameError : Ta izjema se sproži, ko spremenljivke ali imena funkcije ni mogoče najti v trenutnem obsegu.
  • IndexError : Ta izjema se sproži, ko je indeks izven obsega za seznam, torko ali druge vrste zaporedja.
  • KeyError : Ta izjema se pojavi, ko ključa ni mogoče najti v slovarju.
  • ValueError : Ta izjema se sproži, ko je funkcija ali metoda poklicana z neveljavnim argumentom ali vnosom, kot je poskus pretvorbe niza v celo število, ko niz ne predstavlja veljavnega celega števila.
  • AttributeError : Ta izjema se pojavi, ko atributa ali metode ni mogoče najti na objektu, na primer pri poskusu dostopa do neobstoječega atributa primerka razreda.
  • IOError : Ta izjema se sproži, ko V/I operacija, kot je branje ali pisanje datoteke, ne uspe zaradi vhodno/izhodne napake.
  • ZeroDivisionError : Ta izjema se sproži, ko se poskusi število deliti z ničlo.
  • ImportError : Ta izjema se sproži, ko uvozni stavek ne najde ali naloži modula.

To je le nekaj primerov številnih vrst izjem, ki se lahko pojavijo v Pythonu. Pomembno je, da pravilno obravnavate izjeme v vaši kodi z uporabo blokov poskusi razen ali drugih tehnik za obravnavanje napak, da elegantno obravnavate napake in preprečite zrušitev programa.

Razlika med sintaktično napako in izjemami

Sintaksna napaka: Kot že ime pove, je to napako povzročila napačna sintaksa v kodi. Privede do prekinitve programa.

primer:

V kodi je sintaksna napaka. The ' if'> stavku mora slediti dvopičje (:>), in ' print'> izjava mora biti zamaknjena tako, da je znotraj ' if'> blok.

Python3




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

>

>

Izhod:

Izjeme: Izjeme se sprožijo, ko je program sintaktično pravilen, vendar koda povzroči napako. Ta napaka ne ustavi izvajanja programa, vendar spremeni običajni potek programa.

primer:

Tukaj v tej kodi a s delimo 'oznake' z ničlo, tako da bo prišlo do napake, znane kot 'ZeroDivisionError'

Python3




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

>

>

Izhod:

V zgornjem primeru je prišlo do napake ZeroDivisionError, ko poskušamo število deliti z 0.

Opomba: Izjema je osnovni razred za vse izjeme v Pythonu. Lahko preverite hierarhijo izjem tukaj .

primer:

1) TypeError: Ta izjema se pojavi, ko je operacija ali funkcija uporabljena za objekt napačne vrste. Tukaj je primer:
Tukaj a 'TypeError' se dvigne, ker sta oba podatkovna tipa različna, ki se dodajata.

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

poskusite blok catch, da ga razrešite:

Koda poskuša dodati celo število ( ' x'> ) in niz ( ' y'> ) skupaj, kar ni veljavna operacija in bo dvignila a ' TypeError'> . Koda je uporabila a ' try'> in ' except'> blok, da ujame to izjemo in natisne sporočilo o napaki.

Python3




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

>

>

Izhod

Error: cannot add an int and a str>

Stavek Try and Except – lovljenje izjem

Izjave poskusi in razen se uporabljajo za lovljenje in obravnavanje izjem v Pythonu. Stavki, ki lahko povzročijo izjeme, so shranjeni znotraj klavzule try, stavki, ki obravnavajo izjemo, pa so zapisani znotraj klavzule razen.

primer: Tukaj poskušamo dostopati do elementa matrike, katerega indeks je izven meja, in obravnavati ustrezno izjemo.

Python3




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

>

>

Izhod

Second element = 2 An error occurred>

V zgornjem primeru so stavke, ki lahko povzročijo napako, postavljene znotraj stavka poskusa (v našem primeru drugi stavek za tiskanje). Drugi stavek za tiskanje poskuša dostopati do četrtega elementa seznama, ki ga ni, in to povzroči izjemo. To izjemo nato ujame stavek razen.

Lovljenje posebne izjeme

Stavek try ima lahko več kot en stavek razen, da podate obdelovalce za različne izjeme. Upoštevajte, da bo izveden največ en upravljalnik. V zgornjo kodo lahko na primer dodamo IndexError. Splošna sintaksa za dodajanje posebnih izjem je –

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

primer: Lovljenje posebnih izjem v Pythonu

Koda definira funkcijo ' fun(a)'> ki računab>na podlagi vnosaa>. čea>manjše od 4, poskuša deliti z nič, kar povzroči a ' ZeroDivisionError'> . Koda kličefun(3)>infun(5)>znotraj bloka poskusi razen. ObravnavaZeroDivisionError>zafun(3)>in odtisi Napaka ZeroDivisionError se je zgodila in obravnavana. The ' NameError'> blok se ne izvede, ker ni ' NameError'> izjeme v kodi.

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

>

>

Izhod

ZeroDivisionError Occurred and Handled>

Če komentirate vrstico fun(3), bo rezultat

NameError Occurred and Handled>

Zgornji izhod je tak, ker se takoj, ko python poskuša dostopati do vrednosti b, pojavi NameError.

Poskusite s klavzulo Else

V Pythonu lahko uporabite tudi klavzulo else v bloku try-except, ki mora biti prisoten za vsemi klavzulami razen. Koda vstopi v blok else samo, če stavek try ne sproži izjeme.

Poskusite s klavzulo else

Koda definira funkcijo AbyB(a, b)> ki računac>kot ((a+b) / (a-b)) in obravnava potencialZeroDivisionError>. Natisne rezultat, če ni napake pri deljenju z nič. Klicanje AbyB(2.0, 3.0)> izračuna in natisne-5.0>, med klicanjem AbyB(3.0, 3.0)> poskuša deliti z nič, rezultat pa je a ZeroDivisionError> , ki je ujet in rezultat a/b je 0 je natisnjen.

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

>

>

Izhod:

prečrtana markdown
-5.0 a/b result in 0>

Končno ključna beseda v Pythonu

Python ponuja ključno besedo končno , ki se vedno izvede po blokih poskusa in razen. Končni blok se vedno izvede po običajni prekinitvi poskusnega bloka ali po zaključku poskusnega bloka zaradi neke izjeme.

Sintaksa:

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

primer:

Koda poskuša izvesti celoštevilsko deljenje z nič, rezultat pa je a ZeroDivisionError> . Ujame izjemo in natisne Ni mogoče deliti z nič. Ne glede na izjemo,finally>blok se izvede in natisne To se vedno izvede.

Python3




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

>

>

Izhod:

Can't divide by zero This is always executed>

Vzgoja izjeme

The dvigniti izjavo omogoča programerju, da prisili, da se pojavi določena izjema. Edini argument pri dvigu nakazuje izjemo, ki jo je treba dvigniti. To mora biti primerek izjeme ali razred izjem (razred, ki izhaja iz izjeme).

Ta koda namerno dvigne aNameError>s sporočilom Zdravo uporabljatiraise>izjava znotraj atry>blok. Potem pa ujameNameError>izjema, odtisi izjema, in ponovno dvigne isto izjemo z uporaboraise>. To prikazuje, kako je mogoče dvigniti in obravnavati izjeme v Pythonu, kar omogoča sporočila o napakah po meri in nadaljnje širjenje izjem.

Python3




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

>

>

Izhod zgornje kode bo preprosto natisnjena vrstica kot izjema, vendar se bo v zadnji pojavila tudi napaka med izvajanjem zaradi stavka dviga v zadnji vrstici. Torej bo izhod v vaši ukazni vrstici videti takole

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

Prednosti obravnavanja izjem:

  • Izboljšana zanesljivost programa : Če pravilno obravnavate izjeme, lahko preprečite, da bi se vaš program zrušil ali dal nepravilne rezultate zaradi nepričakovanih napak ali vnosa.
  • Poenostavljeno obravnavanje napak : Ravnanje z izjemami vam omogoča, da ločite kodo za obravnavanje napak od glavne logike programa, kar olajša branje in vzdrževanje vaše kode.
  • Koda čistilca: Z obravnavanjem izjem se lahko izognete uporabi zapletenih pogojnih stavkov za preverjanje napak, kar vodi do čistejše in bolj berljive kode.
  • Lažje odpravljanje napak : Ko se sproži izjema, tolmač Python natisne povratno sled, ki prikazuje točno lokacijo, kjer je prišlo do izjeme, kar olajša odpravljanje napak v vaši kodi.

Slabosti obravnavanja izjem:

  • Dodatni stroški delovanja: Obravnava izjeme je lahko počasnejša od uporabe pogojnih stavkov za preverjanje napak, saj mora tolmač opraviti dodatno delo, da ujame in obravnava izjemo.
  • Povečana kompleksnost kode : obravnavanje izjem lahko naredi vašo kodo bolj zapleteno, še posebej, če morate obravnavati več vrst izjem ali izvajati kompleksno logiko obravnavanja napak.
  • Možna varnostna tveganja: Nepravilno obravnavane izjeme lahko potencialno razkrijejo občutljive informacije ali ustvarijo varnostne ranljivosti v vaši kodi, zato je pomembno, da z izjemami ravnate previdno in se izogibate izpostavljanju preveč informacij o vašem programu.

Na splošno so prednosti obravnavanja izjem v Pythonu večje od pomanjkljivosti, vendar je pomembno, da ga uporabljate preudarno in previdno, da ohranite kakovost kode in zanesljivost programa.

Ta članek je prispeval Nikhil Kumar Singh(nickzuck_007)