logo

Zpracování výjimek Pythonu

Až dosud jsme prozkoumali základní python od sady 1 do 4 ( Sada 1 | Sada 2 | Sada 3 | Sada 4 ).

V tomto článku budeme diskutovat o tom, jak zacházet s výjimkami v Pythonu pomocí příkazů try, kromě a nakonec pomocí správných příkladů.



Chyba v Pythonu může být dvou typů, tj. Syntaktické chyby a výjimky . Chyby jsou problémy v programu, kvůli kterým program zastaví provádění. Na druhou stranu jsou výjimky vyvolány, když dojde k některým vnitřním událostem, které změní normální tok programu.

Různé typy výjimek v pythonu:

V Pythonu existuje několik vestavěných výjimek Pythonu, které mohou být vyvolány, když během provádění programu dojde k chybě. Zde jsou některé z nejběžnějších typů výjimek v Pythonu:

  • Chyba syntaxe: Tato výjimka je vyvolána, když interpret narazí na chybu syntaxe v kódu, jako je například špatně napsané klíčové slovo, chybějící dvojtečka nebo nevyvážená závorka.
  • TypeError : Tato výjimka je vyvolána, když je operace nebo funkce aplikována na objekt nesprávného typu, jako je přidání řetězce k celému číslu.
  • NameError : Tato výjimka je vyvolána, když není v aktuálním rozsahu nalezena proměnná nebo název funkce.
  • IndexError : Tato výjimka je vyvolána, když je index mimo rozsah pro seznam, n-tici nebo jiné typy sekvencí.
  • KeyError : Tato výjimka je vyvolána, když klíč není nalezen ve slovníku.
  • ValueError : Tato výjimka je vyvolána, když je funkce nebo metoda volána s neplatným argumentem nebo vstupem, například při pokusu o převod řetězce na celé číslo, když řetězec nepředstavuje platné celé číslo.
  • AttributeError : Tato výjimka je vyvolána, když atribut nebo metoda není nalezena na objektu, například při pokusu o přístup k neexistujícímu atributu instance třídy.
  • IOError : Tato výjimka je vyvolána, když selže vstupně-výstupní operace, jako je čtení nebo zápis souboru, kvůli chybě vstupu/výstupu.
  • ZeroDivisionError : Tato výjimka se aktivuje při pokusu o dělení čísla nulou.
  • ImportError : Tato výjimka je vyvolána, když příkaz importu nedokáže najít nebo načíst modul.

Toto je jen několik příkladů z mnoha typů výjimek, které se mohou v Pythonu vyskytnout. Je důležité správně zacházet s výjimkami ve vašem kódu pomocí bloků try-except nebo jiných technik pro zpracování chyb, abyste mohli elegantně zvládnout chyby a zabránili zhroucení programu.



Rozdíl mezi chybou syntaxe a výjimkami

Chyba syntaxe: Jak název napovídá, tato chyba je způsobena nesprávnou syntaxí v kódu. To vede k ukončení programu.

Příklad:

V kódu je chyba syntaxe. The ' if'> za příkazem by měla následovat dvojtečka (:>), a ' print'> příkaz by měl být odsazen, aby byl uvnitř ' if'> blok.



Python3




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

char to int java

>

>

Výstup:

Výjimky: Výjimky jsou vyvolány, když je program syntakticky správný, ale kód má za následek chybu. Tato chyba nezastaví provádění programu, ale změní normální průběh programu.

Příklad:

Zde v tomto kódu a s rozdělujeme 'známky' o nulu, takže dojde k chybě známé jako 'ZeroDivisionError'

Python3




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

>

10 z 60

>

Výstup:

Ve výše uvedeném příkladu se zvýšila chyba ZeroDivisionError, když se snažíme vydělit číslo 0.

Poznámka: Exception je základní třída pro všechny výjimky v Pythonu. Můžete zkontrolovat hierarchii výjimek tady .

Příklad:

1) TypeError: Tato výjimka je vyvolána, když je operace nebo funkce aplikována na objekt nesprávného typu. Zde je příklad:
Zde a 'Chyba typu' je vyvoláno, protože oba datové typy jsou různé, které se přidávají.

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

zkuste catch blok, abyste to vyřešili:

Kód se pokusí přidat celé číslo ( ' x'> ) a řetězec ( ' y'> ) společně, což není platná operace, a vyvolá to a ' TypeError'> . Použitý kód a ' try'> a ' except'> blok, zachytí tuto výjimku a vytiskne chybovou zprávu.

Python3




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

>

>

Výstup

Error: cannot add an int and a str>

Prohlášení Try and Except – Chytání výjimek

Příkazy Try and Mimo se používají k zachycení a zpracování výjimek v Pythonu. Příkazy, které mohou vyvolávat výjimky, jsou uchovávány uvnitř klauzule try a příkazy, které zpracovávají výjimku, jsou zapsány uvnitř kromě klauzule.

Příklad: Zde se pokoušíme přistupovat k prvku pole, jehož index je mimo rozsah, a zpracovat odpovídající výjimku.

Python3




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

>

>

Výstup

Second element = 2 An error occurred>

Ve výše uvedeném příkladu jsou příkazy, které mohou způsobit chybu, umístěny uvnitř příkazu try (v našem případě druhý příkaz print). Druhý příkaz print se pokusí o přístup ke čtvrtému prvku seznamu, který tam není, a to vyvolá výjimku. Tato výjimka je pak zachycena příkazem výjimkou.

propojený seznam java

Chytání specifické výjimky

Příkaz try může mít více než jednu klauzuli výjimkou, která specifikuje obslužné rutiny pro různé výjimky. Vezměte prosím na vědomí, že bude spuštěn maximálně jeden handler. Do výše uvedeného kódu můžeme přidat například IndexError. Obecná syntaxe pro přidávání konkrétních výjimek je –

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

Příklad: Chytání konkrétních výjimek v Pythonu

Kód definuje funkci ' fun(a)'> že počítáb>na základě vstupua>. Lia>je menší než 4, pokusí se o dělení nulou, což způsobí a ' ZeroDivisionError'> . Kód voláfun(3)>afun(5)>uvnitř bloku try-kromě. Zvládá toZeroDivisionError>profun(3)>a tisky Vyskytla se chyba ZeroDivisionError a byla zpracována. The ' NameError'> blok se neprovede, protože neexistují žádné ' NameError'> výjimky v kódu.

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ýstup

ZeroDivisionError Occurred and Handled>

Pokud okomentujete řádek fun(3), výstup bude

NameError Occurred and Handled>

Výše uvedený výstup je takový, protože jakmile se python pokusí získat přístup k hodnotě b, dojde k NameError.

Zkuste to s Else Clause

V Pythonu můžete také použít klauzuli else v bloku try-except, který musí být přítomen za všemi klauzulemi kromě. Kód vstoupí do bloku else pouze v případě, že klauzule try nevyvolá výjimku.

Zkuste to s klauzulí else

Kód definuje funkci AbyB(a, b)> že počítác>jako ((a+b) / (a-b)) a zpracovává potenciálZeroDivisionError>. Vytiskne výsledek, pokud neexistuje žádná chyba dělení nulou. Povolání AbyB(2.0, 3.0)> počítá a tiskne-5.0>, při volání AbyB(3.0, 3.0)> pokusy o dělení nulou, výsledkem je a ZeroDivisionError> , který je chycen a a/b má za následek 0 je vytištěno.

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

historie v Javě
>

>

Výstup:

-5.0 a/b result in 0>

Konečně klíčové slovo v Pythonu

Python poskytuje klíčové slovo Konečně , který se vždy provede po pokusu a kromě bloků. Poslední blok se vždy provede po normálním ukončení bloku try nebo po ukončení bloku try kvůli nějaké výjimce.

Syntax:

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

Příklad:

Kód se pokusí provést celočíselné dělení nulou, což má za následek a ZeroDivisionError> . Zachytí výjimku a vytiskne Nelze dělit nulou. Bez ohledu na výjimku,finally>blok se provede a vytiskne To se provádí vždy.

Python3

bellfordův algoritmus




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

>

>

Výstup:

Can't divide by zero This is always executed>

Zvýšení výjimky

The zvýšit prohlášení umožňuje programátorovi vynutit výskyt konkrétní výjimky. Jediný argument v raise označuje výjimku, která má být vyvolána. Musí to být buď instance výjimky, nebo třída výjimky (třída odvozená z Exception).

Tento kód záměrně vyvolává aNameError>se zprávou Ahoj za použitíraise>prohlášení v rámci atry>blok. Pak to chytneNameError>výjimka, tisky Výjimka, a znovu vyvolá stejnou výjimku pomocíraise>. To ukazuje, jak lze výjimky vyvolávat a zpracovávat v Pythonu, což umožňuje vlastní chybové zprávy a další šíření výjimek.

Python3




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

>

>

Výstup výše uvedeného kódu bude jednoduše vytištěn na řádku jako Výjimka, ale na posledním řádku dojde také k chybě Runtime kvůli příkazu raise na posledním řádku. Takže výstup na příkazovém řádku bude vypadat takto

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

Výhody zpracování výjimek:

  • Vylepšená spolehlivost programu : Správným zpracováním výjimek můžete zabránit tomu, aby váš program selhal nebo produkoval nesprávné výsledky kvůli neočekávaným chybám nebo vstupu.
  • Zjednodušené zpracování chyb : Zpracování výjimek umožňuje oddělit kód zpracování chyb od hlavní logiky programu, což usnadňuje čtení a údržbu kódu.
  • Kód čističe: Díky zpracování výjimek se můžete vyhnout používání složitých podmíněných příkazů ke kontrole chyb, což vede k čistšímu a čitelnějšímu kódu.
  • Snazší ladění : Když je vyvolána výjimka, interpret Pythonu vytiskne traceback, který ukazuje přesné místo, kde k výjimce došlo, což usnadňuje ladění vašeho kódu.

Nevýhody zpracování výjimek:

  • Režie výkonu: Zpracování výjimek může být pomalejší než použití podmíněných příkazů ke kontrole chyb, protože interpret musí vykonat další práci, aby výjimku zachytil a zpracoval.
  • Zvýšená složitost kódu : Zpracování výjimek může váš kód zkomplikovat, zejména pokud musíte zpracovávat více typů výjimek nebo implementovat složitou logiku zpracování chyb.
  • Možná bezpečnostní rizika: Nesprávně ošetřené výjimky mohou potenciálně odhalit citlivé informace nebo vytvořit bezpečnostní zranitelnost ve vašem kódu, takže je důležité zacházet s výjimkami opatrně a vyhnout se odhalení příliš velkého množství informací o vašem programu.

Celkově výhody zpracování výjimek v Pythonu převažují nad nevýhodami, ale je důležité jej používat uvážlivě a opatrně, aby byla zachována kvalita kódu a spolehlivost programu.

Autorem tohoto článku je Nikhil Kumar Singh (nickzuck_007)