Python išimčių tvarkymas
Iki šiol ištyrėme pagrindinį python nuo 1 iki 4 ( 1 rinkinys | 2 rinkinys | 3 rinkinys | 4 rinkinys ).
Šiame straipsnyje aptarsime, kaip tvarkyti išimtis Python naudojant try, išskyrus ir galiausiai teiginius, naudodamiesi tinkamais pavyzdžiais.
Python klaida gali būti dviejų tipų t.y. Sintaksės klaidos ir išimtys . Klaidos yra programos problemos, dėl kurių programa sustabdo vykdymą. Kita vertus, išimtys keliamos, kai įvyksta tam tikri vidiniai įvykiai, pakeičiantys įprastą programos eigą.
Įvairių tipų python išimtys:
„Python“ programoje yra keletas integruotų „Python“ išimčių, kurios gali būti iškeltos, kai vykdant programą įvyksta klaida. Štai keletas dažniausiai pasitaikančių „Python“ išimčių tipų:
- Sintaksės klaida: Ši išimtis atsiranda, kai vertėjas kode aptinka sintaksės klaidą, pvz., klaidingai parašytą raktinį žodį, trūkstamą dvitaškį arba nesubalansuotą skliaustelį.
- Tipo klaida : ši išimtis atsiranda, kai operacija arba funkcija taikoma netinkamo tipo objektui, pvz., prie sveikojo skaičiaus pridedama eilutė.
- Vardo klaida : Ši išimtis atsiranda, kai kintamojo arba funkcijos pavadinimo nerandama dabartinėje srityje.
- Indekso klaida : ši išimtis iškeliama, kai indeksas yra už sąrašo, eilės ar kitų sekos tipų diapazono.
- Key Error : Ši išimtis atsiranda, kai raktas nerandamas žodyne.
- ValueError : ši išimtis atsiranda, kai funkcija arba metodas iškviečiamas naudojant netinkamą argumentą arba įvestį, pvz., bandant konvertuoti eilutę į sveikąjį skaičių, kai eilutė neatspindi tinkamo sveikojo skaičiaus.
- Atributo klaida : Ši išimtis atsiranda, kai objekte nerandamas atributas arba metodas, pavyzdžiui, bandant pasiekti neegzistuojantį klasės egzemplioriaus atributą.
- IO klaida : Ši išimtis atsiranda, kai įvesties / išvesties operacija, pvz., failo skaitymas arba rašymas, nepavyksta dėl įvesties / išvesties klaidos.
- ZeroDivision Error : ši išimtis atsiranda, kai bandoma skaičių padalyti iš nulio.
- Importavimo klaida : Ši išimtis atsiranda, kai importavimo sakiniui nepavyksta rasti arba įkelti modulio.
Tai tik keli pavyzdžiai iš daugelio išimčių, kurios gali atsirasti Python. Svarbu tinkamai tvarkyti išimtis savo kode, naudojant try-except blokus ar kitus klaidų apdorojimo būdus, kad būtų galima grakščiai tvarkyti klaidas ir neleisti programai strigti.
Skirtumas tarp sintaksės klaidos ir išimčių
Sintaksės klaida: Kaip rodo pavadinimas, šią klaidą sukelia neteisinga kodo sintaksė. Tai veda prie programos nutraukimo.
Pavyzdys:
Kode yra sintaksės klaida. The “ if'> po teiginio turi būti dvitaškis ( :> ), ir “ print'> teiginys turi būti įtrauktas, kad būtų viduje “ if'> blokas.
Python3
amount> => 10000> if> (amount>>> )> |
Išvestis:
Išimtys: Išimtys daromos, kai programa yra sintaksiškai teisinga, tačiau kodas sukelia klaidą. Ši klaida nesustabdo programos vykdymo, tačiau pakeičia įprastą programos eigą.
Pavyzdys:
Šiame kode a s dalijame 'ženklai' nuliu, todėl įvyks klaida, žinoma kaip „ZeroDivisionError“
Python3
marks> => 10000> a> => marks> /> 0> print> (a)> |
Išvestis:
Aukščiau pateiktame pavyzdyje iškėlė ZeroDivisionError, nes bandome skaičių padalyti iš 0.
Pastaba: Išimtis yra pagrindinė visų Python išimčių klasė. Galite patikrinti išimčių hierarchiją čia .
Pavyzdys:
1) Tipo klaida: ši išimtis atsiranda, kai operacija arba funkcija taikoma netinkamo tipo objektui. Štai pavyzdys:
Čia a „Tipo klaida“ iškeliamas, nes abu pridedami duomenų tipai skiriasi.
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'
pabandykite sugauti bloką, kad jį išspręstumėte:
Kodas bando pridėti sveikąjį skaičių ( “ x'> ) ir eilutę ( “ y'> ) kartu, o tai nėra tinkama operacija, ir ji padidins a “ TypeError'> . Kodas naudotas a “ try'> ir “ except'> blokuoti, kad užfiksuotumėte šią išimtį ir išspausdintumėte klaidos pranešimą.
Python3
x> => 5> y> => 'hello'> try> :> > z> => x> +> y> except> TypeError:> > print> (> 'Error: cannot add an int and a str'> )> |
Išvestis
Error: cannot add an int and a str
Išbandykite ir išimkite pareiškimą – gaukite išimtis
Pabandykite ir išskyrus teiginius, kad gautumėte ir tvarkytumėte išimtis Python. Teiginiai, kurie gali sukelti išimtis, laikomi try sakinio viduje, o teiginiai, kurie apdoroja išimtį, rašomi išskyrus sąlygą.
Pavyzdys: Čia mes bandome pasiekti masyvo elementą, kurio indeksas yra neribotas, ir tvarkyti atitinkamą išimtį.
Python3
a> => [> 1> ,> 2> ,> 3> ]> try> :> > print> (> 'Second element = %d'> %> (a[> 1> ]))> > print> (> 'Fourth element = %d'> %> (a[> 3> ]))> except> :> > print> (> 'An error occurred'> )> |
Išvestis
Second element = 2 An error occurred
Aukščiau pateiktame pavyzdyje teiginiai, galintys sukelti klaidą, pateikiami try sakinyje (mūsų atveju antrasis spausdinimo teiginys). Antrasis spausdinimo sakinys bando pasiekti ketvirtąjį sąrašo elementą, kurio ten nėra, ir tai sukuria išimtį. Tada ši išimtis patenka į teiginį „Išskyrus“.
Konkrečios išimties gaudymas
Try sakinys gali turėti daugiau nei vieną sąlygą, išskyrus sąlygą, kad būtų nurodytos skirtingų išimčių tvarkyklės. Atkreipkite dėmesį, kad bus įvykdytas daugiausia vienas tvarkytojas. Pavyzdžiui, aukščiau pateiktame kode galime pridėti IndexError. Bendra konkrečių išimčių pridėjimo sintaksė yra tokia:
try: # statement(s) except IndexError: # statement(s) except ValueError: # statement(s)
Pavyzdys: Konkrečių išimčių gaudymas Python
Kodas apibrėžia funkciją “ fun(a)'> kad apskaičiuoja b> remiantis įvestimi a> . Jeigu a> yra mažesnis nei 4, jis bando padalyti iš nulio, sukeldamas a “ ZeroDivisionError'> . Kodas skambina fun(3)> ir fun(5)> bando, išskyrus bloką. Jis tvarko ZeroDivisionError> dėl fun(3)> ir spaudinius Įvyko ir tvarkoma ZeroDivision Error. The “ NameError'> blokas nevykdomas, nes jų nėra “ NameError'> išimtys kode.
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'> )> |
Išvestis
ZeroDivisionError Occurred and Handled
Jei komentuosite eilutę fun(3), išvestis bus tokia
NameError Occurred and Handled
Aukščiau pateikta išvestis yra tokia, nes kai tik python bando pasiekti b reikšmę, įvyksta NameError.
Pabandykite su Else Clause
„Python“ bloke try-except taip pat galite naudoti sąlygą else, kuri turi būti po visų išlygų išskyrus. Kodas įvedamas į else bloką tik tuo atveju, jei try sąlyga nekelia išimties.
Pabandykite su kita sąlyga
Kodas apibrėžia funkciją AbyB(a, b)> kad apskaičiuoja c> kaip ((a+b) / (a-b)) ir valdo potencialą ZeroDivisionError> . Jis išspausdina rezultatą, jei nėra dalybos iš nulio klaidos. Skambina AbyB(2.0, 3.0)> skaičiuoja ir spausdina -5.0> , skambinant AbyB(3.0, 3.0)> bando padalyti iš nulio, todėl a ZeroDivisionError> , kuris yra sugautas ir a/b rezultatas 0 yra atspausdintas.
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> )> |
Išvestis:
-5.0 a/b result in 0
Galiausiai „Python“ raktinis žodis
Python pateikia raktinį žodį pagaliau , kuris visada vykdomas po trynimo ir išskyrus blokus. Paskutinis blokas visada vykdomas po įprasto trynimo bloko nutraukimo arba po to, kai trynimo blokas baigiasi dėl kokios nors išimties.
Sintaksė:
try: # Some Code.... except: # optional block # Handling of exception (if required) else: # execute if no exception finally: # Some code .....(always executed)
Pavyzdys:
Kodas bando padalyti sveikuosius skaičius iš nulio, todėl gaunamas a ZeroDivisionError> . Pagauna išimtį ir spausdina Negalima padalyti iš nulio. Nepriklausomai nuo išimčių, finally> blokas vykdomas ir išspausdinamas Tai visada vykdoma.
Python3
try> :> > k> => 5> /> /> 0> > print> (k)> except> ZeroDivisionError:> > print> (> 'Can't divide by zero'> )> finally> :> > print> (> 'This is always executed'> )> |
Išvestis:
Can't divide by zero This is always executed
Kėlimo išimtis
The kelti pareiškimą leidžia programuotojui priversti įvykti konkrečią išimtį. Vienintelis argumentas rodo išimtį, kurią reikia pateikti. Tai turi būti išimties pavyzdys arba išimties klasė (klasė, kilusi iš išimties).
Šis kodas tyčia iškelia a NameError> su žinute Sveiki naudojant raise> pareiškimas per a try> blokas. Tada jis pagauna NameError> išimtis, spaudiniai Išimtis, ir pakartotinai iškelia tą pačią išimtį naudojant raise> . Tai parodo, kaip išimtys gali būti padidintos ir tvarkomos naudojant Python, leidžiant pasirinktinius klaidų pranešimus ir toliau skleisti išimtis.
Python3
try> :> > raise> NameError(> 'Hi there'> )> except> NameError:> > print> (> 'An exception'> )> > raise> |
Aukščiau pateikto kodo išvestis bus tiesiog išspausdinta kaip išimtis, tačiau paskutinėje eilutėje taip pat įvyks vykdymo trukmės klaida dėl kėlimo teiginio paskutinėje eilutėje. Taigi, jūsų komandų eilutės išvestis atrodys taip
Traceback (most recent call last): File '/home/d6ec14ca595b97bff8d8034bbf212a9f.py', line 5, in raise NameError('Hi there') # Raise Error NameError: Hi there Išimčių tvarkymo pranašumai:
- Pagerintas programos patikimumas : tinkamai elgdamiesi su išimtimis, galite neleisti programai strigti arba duoti neteisingų rezultatų dėl netikėtų klaidų ar įvesties.
- Supaprastintas klaidų tvarkymas : Išimčių tvarkymas leidžia atskirti klaidų apdorojimo kodą nuo pagrindinės programos logikos, todėl kodą lengviau skaityti ir prižiūrėti.
- Valytojo kodas: Išskyrus išimčių tvarkymą, galite nenaudoti sudėtingų sąlyginių teiginių, kad patikrintumėte, ar nėra klaidų, todėl kodas bus aiškesnis ir lengviau skaitomas.
- Lengvesnis derinimas : Kai iškeliama išimtis, Python interpretatorius išspausdina sekimą, kuriame nurodoma tiksli vieta, kur įvyko išimtis, todėl kodą lengviau derinti.
Išimčių tvarkymo trūkumai:
- Našumo pridėtinės išlaidos: Išimčių tvarkymas gali būti lėtesnis nei naudojant sąlyginius teiginius klaidoms patikrinti, nes vertėjas turi atlikti papildomą darbą, kad gautų ir tvarkytų išimtį.
- Padidėjęs kodo sudėtingumas : Išimčių tvarkymas gali padaryti kodą sudėtingesnį, ypač jei turite tvarkyti kelių tipų išimtis arba įdiegti sudėtingą klaidų valdymo logiką.
- Galimos saugumo rizikos: Netinkamai tvarkomos išimtys gali atskleisti neskelbtiną informaciją arba sukurti saugos spragų jūsų kode, todėl svarbu atsargiai elgtis su išimtimis ir neatskleisti per daug informacijos apie programą.
Apskritai, „Python“ išimčių tvarkymo pranašumai nusveria trūkumus, tačiau svarbu jį naudoti protingai ir atsargiai, kad būtų išlaikyta kodo kokybė ir programos patikimumas.
Šio straipsnio autorius Nikhilas Kumaras Singhas (nickzuck_007)