Kako se nositi s iznimkama u Pythonu

Kako se nositi s iznimkama u Pythonu

Rukovanje iznimkama je vaša mogućnost prilagodbe i prikaza poruka o pogreškama za dijelove vašeg programa koji ne rade.





Bilo da gradite web stranicu, izrađujete API, modul ili bilo koji drugi proizvod pomoću Pythona, vaša sposobnost učinkovitog rješavanja iznimki omogućuje vam izričito navođenje uzroka pogreške.





Ovdje ćemo pogledati kako se možete nositi s iznimkama u Pythonu.





Kako rukovanje iznimkama funkcionira u Pythonu

Kad pokrenete iznimke, govorite Pythonu da prikaže poruku kad god kôd ne uspije. Rukovanje iznimkama je poput govorenja nekome da pokuša podignuti uteg. A ako ne mogu, trebali bi vas obavijestiti.

Kako biste podigli iznimku u Pythonu, reći ćete Pythonu da pokuša pokrenuti određeni blok koda. Ako taj blok ne uspije, tada možete zatražiti od Pythona da podigne definiranu iznimku neuspjelom kodu.



Kada biste trebali koristiti iznimke u programiranju Pythona?

U većini slučajeva standardne Pythonove pogreške možete maskirati iznimkama. No morate ostati oprezni jer to može uzrokovati probleme u otklanjanju pogrešaka. Slijedom toga, možda će vam biti teško otkriti glavni uzrok eventualne greške.

Stoga biste trebali koristiti iznimke kada ste dovoljno testirali svoj kôd i sigurni ste da radi. U konačnici, najbolja je praksa koristiti ih za rješavanje potencijalnih grešaka koje mogu nastati s kraja korisnika, a ne samog koda.





Drugim riječima, iznimke možete upotrijebiti kao alat upozorenja za usmjeravanje korisnika o tome kako koristiti vaš program.

Rukovanje iznimkama Pythona

Da biste obradili iznimke u Pythonu, prvo morate uviti svoj kod u probaj ... osim blok. Povremeno ćete možda morati uključiti a konačno izjavu za poduzimanje daljnjih radnji, ovisno o vašim potrebama.





Koncept kodiranja iznimki Pythona općenito izgleda ovako:

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

Kao što je ranije spomenuto, možete koristiti i konačno u bloku iznimki. Ali kôd koji pišete unutar a konačno klauzula je neovisna i izvodi se bez obzira postoji li iznimka ili ne.

U biti, dobro će vam doći ako imate još jedan blok koda koji želite kontinuirano pokretati bez obzira na to što se događa unutar probaj ... osim blok.

Evo primjera:

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

U gornjem kodu, molimo ponovo pokrenite radi neprekidno, bez obzira postoji li iznimka ili ne.

An drugo stanje također može slijediti osim izjava:

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

Sada pokušajte ponovo s definiranim '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

Gore navedeni primjeri su nestandardne iznimke. No možete imati eksplicitniju iznimku kada kombinirate ugrađene (definirane) iznimke s nestandardiziranim:

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

Gornja iznimka prvo provjerava postoji li Greška u nazivu u probati blok. Zatim ispisuje standard Greška u nazivu prvo iznimka ('naziv' B 'nije definiran'). I podržava ga uz vašu pisanu iznimku ('B treba definirati, molim vas').

Povezano: Osnovni principi programiranja koje mora znati svaki programer

gdje je mikrofon na macbook pro

A ako želite riješiti niz iznimki, možete pratiti i probati blokirati s mnogima osim izjave. Ovo je prilično zgodno ako imate probati Blok može imati mnoge iznimke:

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

Što ako je podjela valjana? Na primjer, zamjena F = 7/0 u gornjem kodu sa F = 7/5 daje:

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

Korisnički definirane iznimke u Pythonu

Možete smisliti i svoju iznimku i nazvati ih kasnije u svom programu. To vam omogućuje da date poseban opis svoje iznimke i imenujete je kako želite.

Bez obzira na to, svaka iznimka koju definira korisnik (izravno ili neizravno) i dalje dolazi iz ugrađenog Izuzetak klase Python.

Primjer koda u nastavku upućuje na bazu Izuzetak izravno pozivom RuntimeError iz toga:

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

Imajte na umu da greška u povezivanju , u ovom slučaju, korisnički definirana klasa koju možete podići kad god vam zatreba u vašem programu.

Povezano: Vodič za početnike u regularnim izrazima s Pythonom

Korisnički definiranu iznimku možete napraviti izvođenjem izravno iz Izuzetak osnovna klasa. Izuzetak u nastavku, međutim, sprječava oduzimanje 5 od 6 i poziva iznimku iz osnovne klase izravno:

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

U praksi možete koristiti iznimku koju ste ranije definirali tako da je pozovete u drugoj funkciji. Na primjer, možete stvoriti floatError koji dopušta samo dodavanje dva plovka:

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

Budući da ste sada definirali a FloatError klase, Python ga podiže ako pokušate dodati dva ne-plutajuća literala koristeći addtwoFloat funkcija.

Možete ispisati FloatError class u istoj Python datoteci u kojoj ste je stvorili da vidite što se događa:

print(FloatError)
Output:

FloatError , međutim, nije ugrađena iznimka Pythona. To možete provjeriti pozivom FloatError u drugoj svježoj Python datoteci u kojoj niste stvorili ovu klasu:

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

Dobivate a Greška u nazivu jer ga Python ne prepoznaje kao standardnu ​​iznimku.

Možete pokušati i sami definirati druge klase pogrešaka da vidite kako se one igraju.

Učinite svoje Python programe prilagođenijima korisnicima uz iznimke

U Pythonu postoji mnogo standardnih iznimaka. Ali možete definirati i svoje. Unatoč tome, jednostavnost korištenja vašeg programa donekle ovisi o tome kako se nosi s različitim iznimkama (bilo korisnički definiranim, nespecifičnim ili standardnim).

Iznimke vam, međutim, omogućuju da odredite kako bi vaš program trebao funkcionirati kada korisnici stupaju u interakciju s njima. Jasno i koncizno navođenje uzroka pogreške korisnicima također daje uvid u to što čine pogrešno, a ponekad ih upućuje u pravom smjeru.

Udio Udio Cvrkut E -pošta Kako otkloniti pogreške u vašem Python kodu

Opremite se znanjem kako biste zgnječili svaku grešku Pythona na svom putu.

Pročitajte Dalje
Povezane teme
  • Programiranje
  • Piton
  • Vodiči za kodiranje
O autoru Idisou Omisola(94 objavljena članka)

Idowu je strastven u bilo čemu pametnom tehnologiji i produktivnosti. U slobodno vrijeme igra se kodiranjem i prebacuje na šahovsku ploču kad mu je dosadno, ali također voli povremeno odustati od rutine. Njegova strast prema pokazivanju ljudi suvremene tehnologije motivira ga da piše više.

Više od Idowua Omisole

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu