Erindite püüdmine Pythonis
Pythonis on võrreldes teiste programmeerimiskeeltega väga palju olukordi, mis põhjustavad erindeid.
Vaatame neid lähemalt. Olgu meil järgmine list:
lst = [1, 2, 3]
Pöördume listi olematu elemendi poole:
print(lts[4])
Pärast koodi käivitamist kuvatakse viga (erind):
IndexError: list index out of range
Kui me soovime jätkata tööd ilma
erindit väljastamata, tuleb see püüda
kasutades konstruktsiooni try-except. Sellel
on järgmine süntaks:
try:
# kood, mis põhjustab erindi
except:
# vea töötlemine
Plokis try tuleks paigutada kood,
mis võib sisaldada erindit. Kui
selle koodi käivitamisel tekib
erind, siis koodi täitmine
ei peatu, vaid läheb üle ploki
except koodi. Selles plokis tuleks
kirjutada sõnum, mis kirjeldab võimalikult
täpselt tekkinud vea olemust.
Kui ploki try täitmisel
ei esine ühtki erindit,
siis kasulik kood lihtsalt täidetakse, aga kood
plokist except - ei täideta.
Püüdkem nüüd meie erind, mis tekib
olematu listi elemendi poole pöördumisel.
Selleks asetame plokki try koodi
potentsiaalse veaga. Ja plokis except
määrame konsooli väljastamise sõnumi 'error:
elem is not exist':
lst = [1, 2, 3]
try:
print(lst[4])
except:
print('error: elem is not exist')
Pärast koodi täitmist kuvatakse:
'error: elem is not exist'
Pärast konstruktsiooni try-except
uurimist peaks teie kirjutatud koodi stiil muutuma.
Nüüd tuleks kõik kohad, kus võib tekkida
erind, mähkida
try plokki, ja plokis except
kirjutada reaktsioon sellele erindile.
Küsige kasutajalt kaks numbrit. Jagage üks teisega. Püüdke erind, mis tekib nulliga jagamisel.
Küsige kasutajalt number. Leidke selle arvu ruutjuur. Püüdke erind, mis tekib negatiivsest arvust juure eraldamisel.
Antud on list. Küsige kasutajalt täisarv. Saage listi element, mille numbri kasutaja sisestas. Püüdke erind, mis tekib, kui kasutaja sisestas numbri väljaspool listi vahemikku.
Antud on järgmine kood:
num = '5'
res = num + 2
print(res)
Mis selle koodiga on valesti? Parandage selle puudused.
Antud on järgmine kood:
lst = [1, 2, 3, 4]
def getElem(iter):
print(iter[4])
getElem(lst)
Mis selle koodiga on valesti? Parandage selle puudused.