1. Ülevaade erindite käsitlusest Pythonis
Mis on erindite käsitlus Pythonis?
Programmi käivitamisel võib tekkida ootamatuid vigu, mida nimetatakse erinditeks. Kui erind tekib, lõpetab programm tavaliselt töö. Python pakub mehhanismi, millega saab neid erindeid töödelda, et programm ei katkeks ootamatult. Erindite käsitlust kasutades saab programm vigadele asjakohaselt reageerida ning jätkata tööd.
Miks on erindite käsitlus oluline?
Erindite käsitlus võimaldab programmil jätkata tööd kasutajasõbralikult ka vigade esinemisel. Lisaks aitab see vigu tuvastada ja siluda, mis parandab programmi töökindlust ja usaldusväärsust.
2. Mis on try-except
lause?
Põhisüntaks
Pythonis kirjutatakse veaohtlik kood try
-plokki ning veaga toimetulek except
-plokki. Põhisüntaks on järgmine:
try:
# Kood, mis võib tekitada vea
except SomeError:
# Kood vea käsitlemiseks
Kui try
-plokis olev kood töötab probleemideta, siis except
-plokki eiratakse. Kui tekib määratud erind, siis tegeleb programm sellega except
-plokis.
Levinud näide: Nulliga jagamise viga
Kui proovite jagada nulliga, tekib ZeroDivisionError
. Selle saab käsitleda järgmiselt:
try:
result = 10 / 0
except ZeroDivisionError:
print("Nulliga jagamine ei ole lubatud")

3. Levinumad erindid ja nende käsitlemine
1. ZeroDivisionError
See erind tekib, kui proovitakse jagada arv nulliga. Näiteks kui jagate arvu 0-ga, viskab Python automaatselt ZeroDivisionError
i.
try:
result = 10 / 0
except ZeroDivisionError:
print("Nulliga jagamine ei ole lubatud")
2. ValueError
ValueError
tekib, kui funktsioonile või operatsioonile antakse sobimatu väärtus. Näiteks allpool püütakse sõne teisendada arvuks, mis ei ole võimalik:
try:
num = int("not_a_number")
except ValueError:
print("Vigane väärtus")
3. Kuidas käsitleda mitut erindit korraga
Kui soovite töödelda mitut erindit korraga, saate need except
plokis kokku liita:
try:
result = 10 / "string"
except (ZeroDivisionError, TypeError):
print("Ilmnes viga")
4. Vigade detailsem tuvastamine erindi objektiga
Erindi objekti saamine as
abil
except
-lausel võimaldab as
-märksõnaga saada erindi objekti, millega saab viidata üksikasjalikule veateabele või logida seda.
try:
a = 10 / 0
except ZeroDivisionError as e:
print(f"Ilmnes viga: {e}")
Selles näites salvestatakse veateade muutujasse e
ning kuvatakse detailid.
5. finally
-ploki kasutamine
Mis on finally
?
finally
-plokki kasutatakse koodi jaoks, mis tuleb käivitada alati – sõltumata sellest, kas erind tekkis või mitte. See sobib näiteks failide avamisel või andmebaasiühenduse sulgemisel.
try:
file = open("test.txt", "r")
except FileNotFoundError:
print("Faili ei leitud")
finally:
print("Faili töö lõpetatud")
Ressursside vabastamine
finally
on kasulik ressursside (nt failide) kindlaks sulgemiseks:
try:
file = open("data.txt", "r")
# Failiga töötamine
finally:
file.close()
Nii tagate, et fail suletakse alati, isegi kui tekib viga.
6. Erindi käsitsi esilekutsumine raise
-ga
Mis on raise
?
raise
-lause võimaldab arendajal ise tekitada erindit. Seda kasutatakse näiteks sisendi valideerimisel või tingimuste põhjal veateate esitamisel.
def check_value(value):
if value < 0:
raise ValueError("Negatiivsed väärtused ei ole lubatud")
Näide kohandatud erindist
Erindi käsitsi tõstmisega saate juba varakult peatada sobimatu sisendi, et vältida ootamatut käitumist.

7. Parimad tavad erindite käsitlemisel Pythonis
1. Väldi liigset erindite käsitlust
Liigne erindite käsitlemine muudab koodi loetamatuks ja raskendab silumist. Kasuta erindite käsitlust vaid seal, kus viga tõenäoliselt esineb, mitte kogu programmi ulatuses.
2. Kasuta logisid vigade salvestamiseks
Kui erind tekib, on soovitatav salvestada see logisse. See aitab hiljem vigu tuvastada. Allpool on näide logging
-mooduli kasutamisest:
import logging
try:
a = 10 / 0
except ZeroDivisionError as e:
logging.error(f"Ilmnes viga: {e}")
3. Väldi liiga üldist except
-lauset
Püüa käsitleda võimalikult konkreetseid vigu, mitte kasutada laia except Exception
i, sest nii võivad olulised probleemid märkamata jääda. Tuvasta ja lahenda iga erind võimalikult täpselt.