Jak zacházet s výjimkami v Pythonu

Jak zacházet s výjimkami v Pythonu

Zpracování výjimek je vaše schopnost přizpůsobit a zobrazit chybové zprávy pro části vašeho programu, které nefungují.





Ať už vytváříte webové stránky, vytváříte API, modul nebo jakýkoli jiný produkt pomocí Pythonu, vaše schopnost efektivně zpracovávat výjimky vám umožňuje výslovně uvést příčinu chyby.





Zde se podíváme na to, jak můžete zvládnout výjimky v Pythonu.





Jak funguje zpracování výjimek v Pythonu

Když vyvoláte výjimky, říkáte Pythonu, aby vyvolal zprávu, kdykoli selže blok kódu. Zacházení s výjimkami je jako někomu říct, aby se pokusil zvednout závaží. A pokud nemohou, měli by vám dát vědět.

Chcete -li však vyvolat výjimku v Pythonu, řeknete Pythonu, aby se pokusil spustit konkrétní blok kódu. Pokud se tento blok nezdaří, můžete potom požádat Python, aby zvýšil definovanou výjimku na neúspěšný kód.



Kdy byste měli používat výjimky v programování v Pythonu?

Ve většině případů můžete standardní chyby Pythonu maskovat pomocí výjimek. Musíte však zůstat ostražití, protože to může způsobit problémy s laděním. V důsledku toho může být pro vás těžké zjistit hlavní příčinu případné chyby.

Proto byste měli používat výjimky, pokud jste dostatečně otestovali svůj kód a jste si jisti, že funguje. Nakonec je nejlepší použít je k řešení potenciálních chyb, které mohou vyplývat z konce uživatele, nikoli ze samotného kódu.





Jinými slovy, výjimky můžete použít jako varovný nástroj, který uživatele seznámí s používáním vašeho programu.

Zpracování výjimek Pythonu

Abyste zvládli výjimky v Pythonu, musíte nejprve zabalit kód do souboru zkuste ... kromě blok. Občas budete možná muset zahrnout a Konečně prohlášení, které zvládne další akce, v závislosti na vašich potřebách.





Koncept kódování výjimek Pythonu obecně vypadá takto:

try:
'code to be executed'
except:
'error message'

Jak již bylo zmíněno dříve, můžete také použít Konečně v bloku výjimek. Ale kód, který napíšete do souboru Konečně klauzule je nezávislá a běží bez ohledu na to, zda existuje výjimka.

V podstatě to přijde vhod, pokud máte další blok kódu, který chcete spouštět nepřetržitě bez ohledu na to, co se děje v rámci zkuste ... kromě blok.

Zde je příklad:

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

Ve výše uvedeném kódu restartujte prosím běží nepřetržitě, bez ohledu na to, zda existuje výjimka nebo ne.

An jiný stav může také následovat po až na tvrzení:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

Nyní to zkuste znovu s definovaným „B“:

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

Výše uvedené příklady jsou nestandardizované výjimky. Ale můžete mít jasnější výjimku, když zkombinujete vestavěné (definované) výjimky s nestandardizovanými:

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

Výše uvedená výjimka nejprve zkontroluje, zda existuje a NázevError v Snaž se blok. Poté vytiskne standard NázevError výjimka první ('jméno' B 'není definováno'). A podporuje to s vaší písemnou výjimkou („B je třeba definovat, prosím“).

Související: Základní principy programování musí znát každý programátor

nejlepší bezplatný software pro mapování mysli 2018

A pokud chcete zvládnout řetězec výjimek, můžete také doprovázet a Snaž se blok s mnoha až na prohlášení. To je docela užitečné, pokud vaše Snaž se block má potenciál mít mnoho výjimek:

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

Co když je rozdělení platné? Například výměna F = 7/0 ve výše uvedeném kódu pomocí F = 7/5 dává:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

Uživatelem definované výjimky v Pythonu

Můžete také přijít s vaší výjimkou a zavolat jim později ve vašem programu. To vám umožní uvést konkrétní popis vaší výjimky a pojmenovat ji, jak chcete.

Nicméně každá uživatelem definovaná výjimka (přímo nebo nepřímo) stále pochází z integrovaného Výjimka třída Pythonu.

Níže uvedený příklad kódu odkazuje na základnu Výjimka přímo voláním RuntimeError z toho:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

Všimněte si, že chyba připojení , v tomto případě je uživatelsky definovaná třída, kterou můžete zvýšit, kdykoli ji ve svém programu potřebujete.

Příbuzný: Průvodce pro regulární výrazy pro začátečníky s Pythonem

Uživatelem definovanou výjimku můžete vytvořit odvozením přímo z Výjimka základní třída. Níže uvedená výjimka však brání odečtení 5 od 6 a volá výjimku přímo ze základní třídy:

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

V praxi můžete použít výjimku, kterou jste definovali dříve, voláním v jiné funkci. Můžete například vytvořit soubor floatError který umožňuje pouze přidání dvou plováků:

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

Protože jste nyní definovali a FloatError třídy, Python to zvýší, pokud se pokusíte přidat dva neplovoucí literály pomocí addtwoFloat funkce.

Můžete vytisknout FloatError třídy ve stejném souboru Pythonu, kde jste jej vytvořili, abyste viděli, co se stane:

print(FloatError)
Output:

FloatError , není však integrovanou výjimkou Pythonu. Můžete to ověřit zavoláním FloatError v jiném čerstvém souboru Pythonu, kde jste tuto třídu nevytvořili:

print(FloatError)
Output: NameError: name 'FloatError' is not defined

Dostanete a NázevError protože Python to nerozpozná jako standardní výjimku.

Můžete také zkusit definovat jiné třídy chyb a zjistit, jak se odehrávají.

Udělejte své Python programy uživatelsky přívětivější s výjimkami

V Pythonu existuje mnoho standardních výjimek. Ale můžete také definovat své. Snadnost používání programu však do určité míry závisí na tom, jak zpracovává různé výjimky (ať už definované uživatelem, nespecifické nebo standardní).

Výjimky vám však umožňují diktovat, jak by měl váš program fungovat, když s nimi uživatelé interagují. Jasné a stručné uvedení příčiny chyby také dává uživatelům přehled o tom, co dělají špatně, a někdy je to nasměruje správným směrem.

Podíl Podíl tweet E-mailem Jak ladit kód Pythonu

Vybavte se know-how, jak rozmačkat každou chybu Pythonu, která vám stojí v cestě.

Číst dále
Související témata
  • Programování
  • Krajta
  • Návody na kódování
O autorovi Idisou Omisola(94 publikovaných článků)

Idowu je zapálený pro cokoli chytrého a produktivního. Ve svém volném čase si hraje s kódováním a když se nudí, přepne na šachovnici, ale také se rád jednou za čas odpoutá od rutiny. Jeho vášeň ukazovat lidem cestu kolem moderních technologií ho motivuje psát více.

Více od Idowu Omisola

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru