logo

Spracovanie výnimiek Pythonu

Doteraz sme preskúmali základný python od sady 1 po 4 ( Set 1 | Súprava 2 | Súprava 3 | Súprava 4 ).

V tomto článku budeme diskutovať o tom, ako zaobchádzať s výnimkami v Pythone pomocou príkazov try, okrem a nakoniec pomocou správnych príkladov.

Chyba v Pythone môže byť dvoch typov, tj. Syntaktické chyby a výnimky . Chyby sú problémy v programe, kvôli ktorým program zastaví vykonávanie. Na druhej strane sa vyskytnú výnimky, keď nastanú nejaké interné udalosti, ktoré zmenia normálny priebeh programu.



Rôzne typy výnimiek v pythone:

V Pythone existuje niekoľko vstavaných výnimiek Pythonu, ktoré možno vyvolať, keď sa počas vykonávania programu vyskytne chyba. Tu sú niektoré z najbežnejších typov výnimiek v Pythone:

  • Chyba syntaxe: Táto výnimka sa aktivuje, keď tlmočník narazí na chybu syntaxe v kóde, ako je napríklad nesprávne napísané kľúčové slovo, chýbajúca dvojbodka alebo nevyvážená zátvorka.
  • TypeError : Táto výnimka sa vyvolá, keď sa operácia alebo funkcia použije na objekt nesprávneho typu, ako je napríklad pridanie reťazca k celému číslu.
  • NameError : Táto výnimka sa vyvolá, keď sa v aktuálnom rozsahu nenájde názov premennej alebo funkcie.
  • IndexError : Táto výnimka sa vyvolá, keď je index mimo rozsahu pre zoznam, n-ticu alebo iné typy sekvencií.
  • KeyError : Táto výnimka sa vyvolá, keď sa kľúč nenájde v slovníku.
  • ValueError : Táto výnimka sa vyvolá, keď je funkcia alebo metóda volaná s neplatným argumentom alebo vstupom, napríklad pri pokuse o konverziu reťazca na celé číslo, keď reťazec nepredstavuje platné celé číslo.
  • AttributeError : Táto výnimka sa vyvolá, keď sa na objekte nenájde atribút alebo metóda, napríklad pri pokuse o prístup k neexistujúcemu atribútu inštancie triedy.
  • IOError : Táto výnimka sa vyvolá, keď I/O operácia, ako je čítanie alebo zápis súboru, zlyhá v dôsledku chyby vstupu/výstupu.
  • ZeroDivisionError : Táto výnimka sa aktivuje pri pokuse o vydelenie čísla nulou.
  • ImportError : Táto výnimka sa vyvolá, keď príkaz importu nedokáže nájsť alebo načítať modul.

Toto je len niekoľko príkladov z mnohých typov výnimiek, ktoré sa môžu vyskytnúť v Pythone. Je dôležité správne zaobchádzať s výnimkami v kóde pomocou blokov try-except alebo iných techník na odstraňovanie chýb, aby ste mohli elegantne zvládnuť chyby a zabrániť zlyhaniu programu.

Rozdiel medzi chybou syntaxe a výnimkami

Chyba syntaxe: Ako už názov napovedá, táto chyba je spôsobená nesprávnou syntaxou v kóde. To vedie k ukončeniu programu.

Príklad:

V kóde je syntaktická chyba. The ' if'> za príkazom by mala nasledovať dvojbodka (:>), a ' print'> vyhlásenie by malo byť odsadené, aby bolo vo vnútri ' if'> blokovať.

Python3




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

>

>

Výkon:

Výnimky: Výnimky sú vyvolané, keď je program syntakticky správny, ale kód má za následok chybu. Táto chyba nezastaví vykonávanie programu, ale zmení normálny priebeh programu.

Príklad:

Tu v tomto kóde delíme 'známky' o nulu, takže sa vyskytne chyba známa ako „ZeroDivisionError“

Python3




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

>

katrina kaif
>

Výkon:

Vo vyššie uvedenom príklade sa zvýšila chyba ZeroDivisionError, keď sa pokúšame deliť číslo 0.

Poznámka: Výnimka je základná trieda pre všetky výnimky v Pythone. Môžete skontrolovať hierarchiu výnimiek tu .

Príklad:

1) TypeError: Táto výnimka sa vyvolá, keď sa operácia alebo funkcia použije na objekt nesprávneho typu. Tu je príklad:
Tu a 'TypeError' sa zvýši, pretože oba typy údajov, ktoré sa pridávajú, sú odlišné.

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

skúste chytiť blok, aby ste to vyriešili:

Kód sa pokúsi pridať celé číslo ( ' x'> ) a reťazec ( ' y'> ) spolu, čo nie je platná operácia a vyvolá to a ' TypeError'> . Použitý kód a ' try'> a ' except'> blok na zachytenie tejto výnimky a vytlačenie chybového hlásenia.

Python3




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

>

>

Výkon

Error: cannot add an int and a str>

Vyhlásenie Try and Except – zachytávanie výnimiek

Príkazy Try and Mimo sa používajú na zachytenie a spracovanie výnimiek v Pythone. Príkazy, ktoré môžu vyvolať výnimky, sú uložené vo vnútri klauzuly try a príkazy, ktoré obsluhujú výnimku, sú zapísané vo vnútri okrem klauzuly.

Príklad: Tu sa pokúšame získať prístup k prvku poľa, ktorého index je mimo hraníc, a spracovať zodpovedajúcu výnimku.

Python3




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

>

>

Výkon

Second element = 2 An error occurred>

Vo vyššie uvedenom príklade sú príkazy, ktoré môžu spôsobiť chybu, umiestnené vo vnútri príkazu try (v našom prípade druhý príkaz print). Druhý príkaz print sa pokúsi o prístup k štvrtému prvku zoznamu, ktorý tam nie je, a to vyvolá výnimku. Táto výnimka je potom zachytená príkazom výnimkou.

Chytanie špecifickej výnimky

Príkaz try môže mať viac ako jednu klauzulu okrem, na špecifikovanie obslužných programov pre rôzne výnimky. Upozorňujeme, že bude vykonaný maximálne jeden handler. Do vyššie uvedeného kódu môžeme pridať napríklad IndexError. Všeobecná syntax na pridávanie špecifických výnimiek je –

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

Príklad: Zachytenie špecifických výnimiek v Pythone

Kód definuje funkciu ' fun(a)'> že počítab>na základe vstupua>. Aka>je menšia ako 4, pokúsi sa o delenie nulou, čo spôsobí a ' ZeroDivisionError'> . Kód voláfun(3)>afun(5)>vnútri bloku try-okrem. Zvláda toZeroDivisionError>prefun(3)>a výtlačkov Vyskytla sa a spracovala chyba ZeroDivisionError. The ' NameError'> blok sa nevykoná, pretože neexistujú žiadne ' NameError'> výnimky v kóde.

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

>

>

Výkon

ZeroDivisionError Occurred and Handled>

Ak okomentujete riadok fun(3), výstup bude

NameError Occurred and Handled>

Vyššie uvedený výstup je taký, že akonáhle sa python pokúsi získať prístup k hodnote b, nastane NameError.

Skúste s Else Clause

V Pythone môžete použiť aj klauzulu else v bloku try-except, ktorý musí byť prítomný po všetkých klauzulách okrem. Kód vstupuje do bloku else iba vtedy, ak klauzula try nevyvoláva výnimku.

Skúste použiť klauzulu else

Kód definuje funkciu AbyB(a, b)> že počítac>ako ((a+b) / (a-b)) a spracováva potenciálZeroDivisionError>. Vytlačí výsledok, ak neexistuje žiadna chyba delenia nulou. Volanie AbyB(2.0, 3.0)> vypočíta a vytlačí-5.0>počas telefonovania AbyB(3.0, 3.0)> pokusy o delenie nulou, výsledkom čoho je a ZeroDivisionError> , ktorý je chytený a a/b má za následok 0 je vytlačený.

Python3

a-b prerezávanie




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

>

>

Výkon:

-5.0 a/b result in 0>

Nakoniec kľúčové slovo v Pythone

Python poskytuje kľúčové slovo konečne , ktorý sa vždy vykoná po pokuse a okrem blokov. Posledný blok sa vždy vykoná po normálnom ukončení bloku try alebo po ukončení bloku try v dôsledku nejakej výnimky.

Syntax:

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

Príklad:

Kód sa pokúša vykonať celočíselné delenie nulou, výsledkom čoho je a ZeroDivisionError> . Zachytí výnimku a vytlačí Nedá sa deliť nulou. Bez ohľadu na výnimku,finally>blok sa vykoná a vytlačí Toto sa vždy vykoná.

Python3




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

>

>

Výkon:

Can't divide by zero This is always executed>

Zvýšenie výnimky

The zvýšiť vyhlásenie umožňuje programátorovi vynútiť výskyt špecifickej výnimky. Jediný argument v upozornení označuje výnimku, ktorá sa má uplatniť. Musí to byť buď inštancia výnimky, alebo trieda výnimky (trieda, ktorá je odvodená od Exception).

Tento kód zámerne vyvoláva aNameError>so správou Ahoj pomocouraise>vyhlásenie v rámci atry>blokovať. Potom to chytíNameError>výnimka, výtlačky Výnimka, a znova vyvolá rovnakú výnimku pomocouraise>. Toto demonštruje, ako môžu byť výnimky vyvolané a spracované v Pythone, čo umožňuje vlastné chybové hlásenia a ďalšie šírenie výnimiek.

Python3




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

>

>

Výstup vyššie uvedeného kódu bude jednoducho riadok vytlačený ako výnimka, ale chyba Runtime sa vyskytne aj v poslednom riadku kvôli príkazu raise v poslednom riadku. Takže výstup na príkazovom riadku bude vyzerať takto

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

Výhody spracovania výnimiek:

  • Vylepšená spoľahlivosť programu : Správnym spracovaním výnimiek môžete zabrániť zlyhaniu programu alebo produkovaniu nesprávnych výsledkov v dôsledku neočakávaných chýb alebo vstupu.
  • Zjednodušené spracovanie chýb : Spracovanie výnimiek vám umožňuje oddeliť kód spracovania chýb od hlavnej logiky programu, čo uľahčuje čítanie a údržbu vášho kódu.
  • Kód čističa: Pomocou spracovania výnimiek sa môžete vyhnúť používaniu zložitých podmienených príkazov na kontrolu chýb, čo vedie k čistejšiemu a čitateľnejšiemu kódu.
  • Jednoduchšie ladenie : Keď je vyvolaná výnimka, interpret Pythonu vytlačí spätné sledovanie, ktoré ukazuje presné miesto, kde sa výnimka vyskytla, čo uľahčuje ladenie kódu.

Nevýhody spracovania výnimiek:

  • Režijné náklady na výkon: Spracovanie výnimiek môže byť pomalšie ako používanie podmienených príkazov na kontrolu chýb, pretože tlmočník musí vykonať ďalšiu prácu, aby zachytil a spracoval výnimku.
  • Zvýšená zložitosť kódu : Spracovanie výnimiek môže urobiť váš kód zložitejším, najmä ak musíte spracovať viacero typov výnimiek alebo implementovať zložitú logiku spracovania chýb.
  • Možné bezpečnostné riziká: Nesprávne spracované výnimky môžu potenciálne odhaliť citlivé informácie alebo vytvoriť bezpečnostné chyby vo vašom kóde, preto je dôležité zaobchádzať s výnimkami opatrne a vyhnúť sa odhaleniu príliš veľkého množstva informácií o vašom programe.

Celkovo výhody spracovania výnimiek v Pythone prevažujú nad nevýhodami, ale je dôležité používať ho uvážlivo a opatrne, aby sa zachovala kvalita kódu a spoľahlivosť programu.

Autorom tohto článku je Nikhil Kumar Singh (nickzuck_007)