Pythonda istisnolarni ushlash
Python boshqa dasturlash tillariga nisbatan juda ko'p istisno vaziyatlarini keltirib chiqaradi.
Keling, ularni batafsil ko'rib chiqaylik. Faraz qilaylik, bizda quyidagi ro'yxat mavjud:
lst = [1, 2, 3]
Keling, ro'yxatda mavjud bo'lmagan elementga murojaat qilaylik:
print(lts[4])
Kod bajarilgandan so'ng xato (istisno) chiqadi:
IndexError: list index out of range
Agar bizga istisnoni chiqarmasdan ishni davom ettirish kerak bo'lsa,
uni try-except konstruksiyasi yordamida ushlash kerak. U
quyidagi sintaksisga ega:
try:
# istisno keltirib chiqaradigan kod
except:
# xatoni qayta ishlash
try blokida istisno o'z ichiga olgan kod joylashishi kerak.
Agar ushbu kodni bajarish paytida istisno vaziyati yuzaga kelsa,
kod bajarilishi to'xtamaydi, balki except blokidagi kodga
o'tadi. Ushbu blokda yuzaga kelgan xatoning mohiyatini iloji boricha
aniq tavsiflovchi xabar chiqarish belgilanishi kerak.
Agar try blokini bajarish paytida hech qanday istisno vaziyati
yuzaga kelmasa, foydali kod shunchaki bajariladi va except
blokidagi kod bajarilmaydi.
Keling, ro'yxatda mavjud bo'lmagan elementga murojaat qilishda yuzaga
keladigan istisnomizni ushlaymiz. Buning uchun try blokiga
potensial xatoli kodni joylashtiramiz. except blokida esa
'error: elem is not exist' xabarini konsolga chiqarishni
ko'rsatamiz:
lst = [1, 2, 3]
try:
print(lst[4])
except:
print('error: elem is not exist')
Kod bajarilgandan so'ng chiqadi:
'error: elem is not exist'
try-except konstruksiyasini o'rganganingizdan so'ng, siz
yozgan kodning uslubi o'zgarishi kerak. Endi istisno vaziyati yuzaga
kelishi mumkin bo'lgan barcha joylar try ichiga o'ralishi
kerak, except blokida esa ushbu istisnoga reaktsiya
belgilanishi kerak.
Foydalanuvchidan ikkita raqam so'rang. Bittasini ikkinchisiga bo'ling. Nolga bo'lish istisno vaziyatini ushlang.
Foydalanuvchidan raqam so'rang. Ushbu raqamning ildizini toping. Manfiy sondan ildiz olish istisno vaziyatini ushlang.
Ro'yxat berilgan. Foydalanuvchidan butun son so'rang. Foydalanuvchi kiritgan raqamdagi ro'yxat elementini oling. Foydalanuvchi ro'yxat diapazonidan tashqaridagi raqamni kiritganida yuzaga keladigan istisno vaziyatini ushlang.
Quyidagi kod berilgan:
num = '5'
res = num + 2
print(res)
Ushbu kodda nima noto'g'ri? Uning kamchiliklarini tuzating.
Quyidagi kod berilgan:
lst = [1, 2, 3, 4]
def getElem(iter):
print(iter[4])
getElem(lst)
Ushbu kodda nima noto'g'ri? Uning kamchiliklarini tuzating.