Ako zaobchádzať s výnimkami v Pythone

Ako zaobchádzať s výnimkami v Pythone

Spracovanie výnimiek je vaša schopnosť prispôsobiť a zobrazovať chybové správy pre časti programu, ktoré nefungujú.





Či už vytvárate webovú stránku, vytvárate API, modul alebo akýkoľvek iný produkt pomocou Pythonu, vaša schopnosť efektívne zvládať výnimky vám umožňuje explicitne uviesť príčinu chyby.





Tu sa pozrieme na to, ako môžete zvládnuť výnimky v Pythone.





Ako funguje spracovanie výnimiek v Pythone

Keď vyvoláte výnimky, poviete Pythonu, aby vyvolal správu vždy, keď zlyhá blok kódu. Manipulácia s výnimkami je ako povedať niekomu, aby sa pokúsil zdvihnúť váhu. A ak nemôžu, mali by vám to dať vedieť.

Ak však chcete v Pythone vyvolať výnimku, poviete mu, aby sa pokúsil spustiť konkrétny blok kódu. Ak tento blok zlyhá, môžete potom požiadať Python, aby vyvolal definovanú výnimku pre chybný kód.



Kedy by ste mali používať výnimky v programovaní v Pythone?

Štandardné chyby Pythonu môžete vo väčšine prípadov maskovať pomocou výnimiek. Musíte však byť ostražití, pretože to môže spôsobiť problémy s ladením. V dôsledku toho môže byť ťažké zistiť hlavnú príčinu prípadnej chyby.

Preto by ste mali používať výnimky, keď ste dostatočne otestovali svoj kód a ste si istí, že funguje. Nakoniec je najlepšou praxou použiť ich na riešenie potenciálnych chýb, ktoré môžu vyplývať z konca používateľa, a nie zo samotného kódu.





Inými slovami, výnimky môžete použiť ako nástroj varovania, ktorý používateľov poučí o tom, ako používať váš program.

Zaobchádzanie s výnimkami v jazyku Python

Na zvládnutie výnimiek v Pythone musíte najskôr zabaliť kód do súboru skús ... okrem blok. Príležitostne možno budete musieť zahrnúť aj príponu konečne vyhlásenie na zvládnutie ďalších akcií v závislosti od vašich potrieb.





Koncept kódovania výnimiek v Pythone spravidla vyzerá takto:

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

Ako už bolo spomenuté, môžete tiež použiť konečne vo výnimočnom bloku. Ale kód, ktorý napíšete do súboru konečne klauzula je nezávislá a beží bez ohľadu na to, či existuje výnimka alebo nie.

V podstate to príde vhod, ak máte ďalší blok kódu, ktorý chcete spustiť nepretržite bez ohľadu na to, čo sa deje v rámci skús ... okrem blok.

Tu je príklad:

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

Vo vyššie uvedenom kóde reštartujte prosím beží nepretržite bez ohľadu na to, či existuje výnimka alebo nie.

An inak stav môže tiež nasledovať po okrem vyhlásenie:

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

Teraz to skúste znova 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

Vyššie uvedené príklady sú neštandardizované výnimky. Môžete však mať explicitnejšiu výnimku, keď vstavané (definované) výnimky skombinujete s neštandardizovaný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

Vyššie uvedená výnimka najskôr skontroluje, či existuje a NameError v skúsiť blok. Potom vytlačí štandard NameError výnimka ako prvá ('názov' B 'nie je definovaný'). A podporuje to s vašou písomnou výnimkou („B je potrebné definovať, prosím“).

Súvisiace: Základné princípy programovania by mal vedieť každý programátor

ako automaticky prenášať údaje z Excelu do Wordu

A ak chcete zvládnuť reťazec výnimiek, môžete sprevádzať aj a skúsiť blok s mnohými okrem Vyhlásenia. Je to celkom praktické, ak je váš skúsiť blok má potenciál mať mnoho výnimiek:

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

Čo keď je rozdelenie platné? Napríklad výmena F = 7/0 vo vyššie uvedenom kóde s F = 7/5 dáva:

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

Užívateľom definované výnimky v Pythone

Môžete tiež prísť so svojou výnimkou a volať im neskôr vo svojom programe. To vám umožní špecifikovať popis vašej výnimky a pomenovať ju, ako chcete.

Napriek tomu každá používateľom definovaná výnimka (priamo alebo nepriamo) stále pochádza z vstavanej pamäte Výnimka trieda Pythonu.

Nasledujúci príklad kódu odkazuje na základňu Výnimka priamo volaním RuntimeError od 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

Poznač si to chyba spojenia , v tomto prípade je užívateľsky definovaná trieda, ktorú môžete zvýšiť kedykoľvek budete potrebovať vo svojom programe.

Súvisiace: Príručka pre začiatočníkov k regulárnym výrazom v jazyku Python

Užívateľom definovanú výnimku môžete vytvoriť tak, že ju odvodíte priamo z Výnimka základná trieda. Nasledujúca výnimka však bráni odpočítaniu 5 od 6 a priamo volá výnimku zo základnej triedy:

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žiť výnimku, ktorú ste definovali predtým, zavolaním v inej funkcii. Môžete napríklad vytvoriť súbor floatError čo umožňuje iba pridanie dvoch plavákov:

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

Pretože ste teraz definovali a FloatError triedy, Python to zvýši, ak sa pokúsite pridať dva neplávajúce literály pomocou súboru addtwoFloat funkciu.

Môžete vytlačiť FloatError triedu v tom istom súbore Pythonu, kde ste ho vytvorili, aby ste videli, čo sa stane:

print(FloatError)
Output:

FloatError , nie je však vstavanou výnimkou v jazyku Python. Môžete si to overiť telefonovaním FloatError v inom čerstvom súbore Pythonu, kde ste túto triedu nevytvorili:

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

Dostanete a NameError pretože Python to nepozná ako štandardnú výnimku.

Môžete skúsiť definovať aj ďalšie triedy chýb a zistiť, ako sa prejavujú.

Urobte svoje programy Python užívateľsky príjemnejšie s výnimkami

V Pythone existuje mnoho štandardných výnimiek. Môžete však definovať aj svoje. Jednoduchosť používania programu však do určitej miery závisí od toho, ako zvláda rôzne výnimky (či už definované používateľom, nešpecifické alebo štandardné).

Výnimky vám však umožňujú diktovať, ako by mal váš program fungovať, keď s nimi používatelia interagujú. Jasné a stručné uvedenie príčiny chyby tiež poskytne používateľom prehľad o tom, čo robia zle, a niekedy ich to nasmeruje správnym smerom.

zdieľam zdieľam Tweet E -mail Ako ladiť váš kód Python

Vybavte sa know-how, ako rozdrviť každú chybu Pythonu v ceste.

Čítajte ďalej
Súvisiace témy
  • Programovanie
  • Python
  • Návody na kódovanie
O autorovi Idisou Omisola(94 publikovaných článkov)

Idowu je zanietený pre čokoľvek, čo sa týka inteligentných technológií a produktivity. Vo svojom voľnom čase sa hrá s kódovaním a keď sa nudí, prejde na šachovnicu, ale tiež rád, keď sa raz za čas odtrhne od rutiny. Jeho vášeň ukazovať ľuďom cestu okolo moderných technológií ho motivuje písať viac.

Viac od Idowu Omisola

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber