Erandkäsitlus on teie võimalus kohandada ja kuvada tõrketeateid programmi osadele, mis ei tööta.

Sõltumata sellest, kas loote veebisaiti, teete API-d, moodulit või muud toodet, kasutades Pythoni, võimaldab erandite tõhus haldamine teil selgesõnaliselt öelda vea põhjuse.

Siin vaatame, kuidas saate Pythonis erandeid käsitleda.

Kuidas erandite käitlemine Pythonis töötab

Erandite tõstatamise korral käskite Pythonil tõstatada teade alati, kui koodiplokk ebaõnnestub. Erandkäsitlus on nagu käskida kellelgi proovida raskust tõsta. Ja kui nad ei saa, peaksid nad sellest teile teada andma.

Pythonis erandi tekitamiseks ütlete siiski, et Python prooviks käivitada konkreetse koodiploki. Kui see plokk ebaõnnestub, võite seejärel paluda Pythonil tõsta nurjunud koodile määratletud erandi.

Millal peaksite Pythoni programmeerimisel kasutama erandeid?

Enamasti saate maskeerida Pythoni standardvead erandite abil. Kuid peate olema valvsad, sest see võib põhjustada silumisprobleeme. Seetõttu võib teil olla raske välja selgitada võimaliku vea algpõhjust.

Seetõttu peaksite kasutama erandeid, kui olete oma koodi piisavalt testinud ja olete kindel, et see töötab. Lõppkokkuvõttes on parim tava neid kasutada võimalike rikete kõrvaldamiseks, mis võivad tuleneda kasutaja otsast, mitte koodist endast.

Teisisõnu, saate erandeid kasutada hoiatustööriistana, et juhendada kasutajaid teie programmi kasutama.

Pythoni erandite käsitlemine

Pythonis erandite käsitlemiseks peate esmalt pakkima oma koodi a-sse proovige... välja arvatud blokeerida. Mõnikord peate võib-olla lisama a lõpuks avaldus edasiste toimingute tegemiseks, sõltuvalt teie vajadustest.

Pythoni erandite kodeerimiskontseptsioon näeb üldiselt välja selline:

proovige:
"käivitatav kood"
välja arvatud:
"veateade"

Nagu varem mainitud, saate ka kasutada lõpuks erandiplokis. Kuid kood, mille kirjutate a sisse lõpuks klausel on sõltumatu ja töötab sõltumata sellest, kas on erand.

Sisuliselt on see kasulik, kui teil on mõni teine ​​koodiplokk, mida soovite pidevalt käivitada, olenemata sellest, mis toimub proovige... välja arvatud blokeerida.

Siin on näide:

proovige:
trükk (9 + 6)
välja arvatud:
print ("veateade")
lõpuks:
print ("palun taaskäivitage")
Väljund:
15
palun taaskäivitage

Ülaltoodud koodis palun taaskäivitage töötab pidevalt, olenemata sellest, kas on erand või mitte.

An muud seisund võib järgida ka välja arvatud avaldus:

proovige:
C = 2 + B
välja arvatud:
print ("B tuleb määratleda")
muu:
print (u "Lisamine õnnestus! Tulemuseks on% s "% (C))
Väljund: B tuleb määratleda

Proovige nüüd uuesti, kui määratletud on "B":

proovige:
B = 5
C = 2 + B
välja arvatud:
print ("B tuleb määratleda")
muu:
print (u "Lisamine õnnestus! Tulemuseks on% s "% (C))
Väljund: Lisamine õnnestus! Tulemuseks on 7

Ülaltoodud näited on standardiseerimata erandid. Kuid teil võib olla selgesõnalisem erand, kui ühendate sisseehitatud (määratletud) erandid standardiseerimata eranditega:

proovige:
C = 2 + B
välja arvatud NameError as err:
print (err, ":", "B tuleb määratleda, palun")
muu:
print (u "Lisamine õnnestus! Tulemuseks on% s "% (C))
Väljund: nimi 'B' pole määratletud: palun tuleb defineerida B

Ülaltoodud erand kontrollib kõigepealt, kas on a NimiViga aastal proovige blokeerida. Seejärel prindib see standardi NimiViga erand esimene ("nime" B "pole määratletud"). Ja toetab seda teie kirjaliku erandiga ("B tuleb määratleda, palun").

Seotud: Programmeerimise põhiprintsiibid, mida iga programmeerija peab teadma

Ja kui soovite käsitleda erandite ahelat, võite ka a proovige blokeerida paljudega välja arvatud avaldused. See on üsna mugav, kui teie proovige plokil võib olla palju erandeid:

proovige:
B = 5
C = 2 + B
D = ujuk (6)
F = 7/0
välja arvatud NameError as err:
print (err, ":", "B tuleb määratleda, palun")
välja arvatud ValueError kui val:
print (val, ":", "Te ei saa neid andmeid teisendada")
välja arvatud ZeroDivisionError kui nullerr:
print (zeroerr, ":", "Te ei saa numbrit nulliga jagada")
muu:
print (u "Operatsioon õnnestus! Tulemused on:% s,% s ja% s "% (C, D, F))
Väljund: jagamine nulliga: numbrit ei saa jagada nulliga

Mis siis, kui jagunemine kehtib? Näiteks asendades F = 7/0 ülaltoodud koodis F = 7/5 annab:

Väljund: Operatsioon õnnestus! Tulemused on: 7, 6,0 ja 1,4

Kasutaja määratud erandid Pythonis

Võite ka oma erandi välja mõelda ja neile hiljem oma programmis helistada. See võimaldab teil anda erandi konkreetse kirjelduse ja nimetada seda oma äranägemise järgi.

Sellest hoolimata pärineb iga kasutaja määratletud erand (otseselt või kaudselt) ikkagi sisseehitatud seadmest Erand klassi Pythoni.

Allpool toodud näidiskood viitab baasile Erand otse helistades RuntimeError sellest:

klassi ühendusError (RuntimeError):
def __init __ (ise, väärtus):
ise.väärtus = väärtus
proovige:
tõsta connectionError ("Vale hostinimi")
välja arvatud connectionError as err:
print (err.value)
Väljund: Vale hostinimi

Pange tähele, et ühenduse vigaon antud juhul kasutaja määratud klass, mille saate tõsta igal ajal, kui seda oma programmis vaja on.

Seotud: Beginner’s Guide to Regular Expressions with Python

Kasutaja määratletud erandi saate teha tuletades selle otse Erand baasklass. Allpool olev erand takistab 5-st lahutamist 6-st ja kutsub erandi otse baasklassist:

klassi vead (erand):
üle andma
klass sixFiveError (vead):
def __init __ (mina, väärtus, sõnum):
ise.väärtus = väärtus
ise.sõnum = sõnum
proovige:
tõsta sixFiveError (6-5, "See alamvõrk pole lubatud")
välja arvatud sixFiveError as e:
print ("Tekkis viga:", e-kiri)
Väljund: Ilmnes viga: see alamvorm ei ole lubatud

Praktikas saate kasutada varem määratletud erandit, kutsudes seda mõnes muus funktsioonis. Näiteks saate luua a floatViga mis võimaldab lisada ainult kahte ujukit:

# Esmalt helistage baaserandi klassid:
klassi vead (erand):
üle andma
# Järgmisena tuletage põhiklassi enda erand:
klass FloatError (vead):
def __init __ (mina, väärtus, sõnum):
ise.väärtus = väärtus
ise.sõnum = sõnum
# Loo funktsioon kahe ujuki lisamiseks:
def addTwoFloat (a, b):
kui (tüüp (a) ja tüüp (b))! = ujuk:
tõsta FloatError (a + b, "Lisamiseks peavad numbrid olema ujuvad")
muu:
print (a + b)
addTwoFloat (4, 7)
Väljund: __main __. FloatError: (11, 'Lisamiseks peavad numbrid olema ujuvad')

Sest olete nüüd määranud a FloatError klassi, tõstab Python selle, kui proovite lisada kaks mitte-ujukit literaali, kasutades addtwoFloat funktsioon.

Võite printida FloatError klass samas Pythoni failis, kus olete selle loonud, et näha, mis juhtub:

print (FloatError)
Väljund:

FloatErrorpole siiski sisseehitatud Pythoni erand. Seda saate kontrollida helistades FloatError teises värskes Pythoni failis, kus te pole seda klassi loonud:

print (FloatError)
Väljund: NameError: nimi 'FloatError' pole määratletud

Saad a NimiViga kuna Python ei tunnista seda tavalise erandina.

Võite proovida ka teisi veaklasse ise määratleda, et näha, kuidas need mängivad.

Muutke Pythoni programmid eranditega kasutajasõbralikumaks

Pythonis on palju tavapäraseid erandeid. Kuid saate määratleda ka oma. Sellest hoolimata sõltub teie programmi kasutamise lihtsus mingil määral sellest, kuidas see käsitleb erinevaid erandeid (olgu siis kasutaja määratletud, mittespetsiifiline või standardne).

Erandid võimaldavad teil aga dikteerida, kuidas teie programm peaks töötama, kui kasutajad nendega suhtlevad. Vea põhjuse selge ja lühike väljatoomine annab kasutajatele ka teadmise, mida nad valesti teevad, ja mõnikord näitab see neid õiges suunas.

E-post
Kuidas Pythoni koodi siluda

Varustage end oskusteabega, kuidas oma teekonnal iga Pythoni viga kokku lüüa.

Loe edasi

Seotud teemad
  • Programmeerimine
  • Python
  • Kodeerimise õpetused
Autori kohta
Idowu Omisola (82 artiklit on avaldatud)

Idowu on kirglik kõigest nutikast tehnoloogiast ja tootlikkusest. Vabal ajal mängib ta kodeerimisega ringi ja lülitub igavuse korral malelauale, kuid armastab ka rutiinist lahti murda. Kirg, et näidata inimestele moodsate tehnikateed, motiveerib teda rohkem kirjutama.

Veel Idowu Omisolalt

Telli meie uudiskiri

Liituge meie uudiskirjaga, kus leiate tehnilisi näpunäiteid, ülevaateid, tasuta e-raamatuid ja eksklusiivseid pakkumisi!

Veel üks samm !!!

Palun kinnitage oma e-posti aadress meilis, mille me just saatsime.

.