1. Mis on Pythoni erind?
Pythoni erind on teatud tüüpi viga, mis tekib programmi täitmise ajal. Tavaliselt täidab programm koodi järjestikku ülevalt alla, kuid kui tekib viga, peatatakse selle osa täitmine ja visatakse erind. Näiteks, kui proovite jagada nulliga, tekib ZeroDivisionError
, ja kui proovite juurde pääseda loendi indeksile, mida pole olemas, tekib IndexError
.
1.1 Levinumad erindite tüübid
Pythonil on palju sisseehitatud erindeid. Allpool on mõned levinumad näited:
ValueError
: Kui funktsioon saab sobimatu väärtuseTypeError
: Kui operatsioon või funktsioon rakendatakse valele andmetüübileIndexError
: Kui proovite pääseda ligi loendi (või muu järjestuse) indeksile, mis jääb väljapoole kehtivat vahemikkuZeroDivisionError
: Kui proovite jagada nulliga
Need erindid aitavad pakkuda diagnostilist teavet, kui programmi täitmise ajal tekivad ootamatud vead.
2. Põhiline erindite käsitlemine try
ja except
abil
Pythonis kasutatakse erindite käsitlemiseks try
ja except
. See aitab vältida programmi krahhi vigade korral ning võimaldab programmil jätkata muude osade täitmist.
2.1 Põhiline süntaks
Kood, mis võib tekitada vea, asetatakse try
-plokki, ja vastava vea korral täidetakse except
-plokk.
try:
result = 10 / 0
except ZeroDivisionError:
print("Nulliga jagamine pole lubatud.")
Selles näites tekib ZeroDivisionError
, mille tulemusel täidetakse except
-plokk ning kuvatakse sõnum “Nulliga jagamine pole lubatud.”
2.2 Mitme except
-ploki kasutamine
Kui soovite käsitleda mitut erinevat erindit, võite kasutada mitut except
-plokki. Näiteks saab erinevaid vigu, nagu NameError
ja TypeError
, käsitleda eraldi.
try:
print(a)
except NameError:
print('Muutuja "a" pole defineeritud.')
except TypeError:
print('Kasutatud on vale andmetüüpi.')
Selles koodis tekib NameError
, kuna a
pole defineeritud, ja selle tulemusel kuvatakse vastav teade.
3. Mitme erindi käsitlemine ühe plokiga
Kui programm võib visata erinevat tüüpi erindeid, saab neid käsitleda ühe except
-plokiga.
3.1 Mitme erindi käsitlemine ühe except
-plokiga
Mitut erindit saab määrata except
-plokis tuplena.
try:
num = int(input("Sisestage number: "))
result = 10 / num
except (ValueError, ZeroDivisionError):
print("Sisestati kehtetu väärtus või prooviti jagada nulliga.")
Selles näites, kui kasutaja sisestab kehtetu väärtuse või nulli, käsitletakse mõlemat viga koos ja kuvatakse vastav teade.
3.2 Erindite üldine käsitlemine vanemklassi abil
Exception
-klass on enamiku sisseehitatud erindite vanemklass. Kui soovite püüda kinni kõik erindid, saate seda kasutada, kuid see meetod on väga lai ja vajab ettevaatlikku kasutamist.
try:
# Kood, mis võib põhjustada vea
except Exception as e:
print("Tekkis viga:", e)
See meetod püüab kinni kõik erindid ja kuvab veateate. Siiski on soovitatav käsitleda spetsiifilisi erindeid alati, kui võimalik.

4. Erindi käsitsi viskamine (raise
)
Mõnikord võib olla vaja erindi käsitsi visata, kui teatud tingimused pole täidetud. Selleks kasutatakse raise
-käsku.
4.1 raise
-käskluse kasutamine
Järgnevas näites visatakse ValueError
, kui sisestatud väärtus on negatiivne.
def check_value(value):
if value < 0:
raise ValueError("Negatiivsed väärtused pole lubatud.")
return value
try:
result = check_value(-1)
except ValueError as e:
print(e)
Selles näites, kuna -1
on negatiivne, visatakse ValueError
ning kuvatakse sõnum “Negatiivsed väärtused pole lubatud.”
4.2 raise
-käskluse kasutamine keerukamate erindite puhul
raise
saab kasutada ka kohandatud erindiklasside määratlemisel. See võimaldab luua erindeid, mis kajastavad täpsemalt programmi spetsiifilisi vajadusi.
5. Erindite teabe hankimine
Kui erind tekib, võib selle kohta lisateabe saamine aidata probleemi diagnoosida ja siluda. except
-plokis saab kasutada as
-lausekest, et saada erindi objekt.
5.1 as
-lausekese kasutamine
Järgnevas näites saadakse erindi objekt e
ja kuvatakse selle sõnum.
try:
result = 10 / 0
except ZeroDivisionError as e:
print("Tekkis viga:", e)
Selles koodis tekib ZeroDivisionError
ja kuvatakse sõnum “Tekkis viga: division by zero”. Erindi objekt sisaldab teavet veatüübi ja veateate kohta.
5.2 Erindi objekti kasutamine
Erindi objekti saab kasutada mitte ainult veateate kuvamiseks, vaid ka logide salvestamiseks või täiendavate toimingute tegemiseks konkreetsete vigade korral. Näiteks saab veateateid logifaili salvestada, et hiljem silumiseks kasutada.
6. Parimad praktikad erindite käsitlemiseks
Tõhus erindite käsitlemine suurendab programmi usaldusväärsust ja töökindlust. Siin on mõned parimad praktikad Pythoni erindite käsitlemiseks.
6.1 Püüa kinni ainult konkreetseid erindeid
Võimalusel püüa kinni ainult spetsiifilisi erindeid. Selle asemel, et püüda kinni üldine Exception
, on parem püüda kinni konkreetsed erinditüübid, näiteks ValueError
või TypeError
. See muudab vigade käsitlemise selgemaks ja täpsemaks.
6.2 Logi erindid
Veateadete logimine aitab hiljem probleeme tuvastada ja parandada. Suuremates programmides on oluline registreerida, millal ja kus erind tekkis.
6.3 Krahhi vältimine (graceful degradation)
Programmi ei tohiks lasta täielikult krahhida erindi tõttu. Selle asemel tuleks kuvada kasutajale arusaadav veateade või pakkuda alternatiivseid lahendusi, et vältida ootamatut lõpetamist.
6.4 Väldi liigset erindite käsitlemist
Ära püüa kõiki erindeid kinni ilma nendega midagi tegemata. See võib raskendada vigade leidmist ja põhjustada ootamatut käitumist. Kui püüad erindi kinni, peaks vähemalt olema veateate logimine või mõistlik töötlemine.
6.5 finally
-ploki kasutamine
finally
-plokk täidetakse alati, sõltumata sellest, kas erind tekkis või mitte. Seda saab kasutada ressursside vabastamiseks, näiteks failide sulgemiseks või võrguühenduste katkestamiseks.
try:
file = open("example.txt", "r")
# Faili lugemine
except FileNotFoundError:
print("Faili ei leitud.")
finally:
file.close()
Selles näites suletakse fail finally
-plokis isegi siis, kui selle avamine ebaõnnestub.
7. Kokkuvõte
Pythoni erindite käsitlemine on oluline tehnika, mis aitab parandada programmi töökindlust ja pakkuda paremat kasutajakogemust. try
ja except
abil saab vigadele reageerida ning raise
-lause abil saab vajadusel erindeid visata.
- Saime aru, mis on erind ja millised on levinumad erinditüübid.
- Õppisime, kuidas kasutada
try
jaexcept
erindite käsitlemiseks. - Uurisime, kuidas käsitleda mitut erindit ühe
except
-plokiga. - Õppisime, kuidas
raise
-lause abil erindeid visata ja seda erinevates olukordades kasutada. - Saime teada, kuidas kasutada erindi objekti, et hankida täiendavat teavet vigade kohta.
- Lõpuks tutvusime erindite käsitlemise parimate praktikatega ja nende olulisusega.
Erindite käsitlemine on oluline osa tarkvaraarendusest, mis aitab tagada programmi töökindluse. Kasutades neid tehnikaid, saate luua kasutajasõbralikke ja stabiilseid Pythoni rakendusi.