Python'da xatolarni ushlash (try/except)
Har qanday dasturda xato yuz berishi mumkin: foydalanuvchi son o’rniga harf
kiritadi, fayl topilmaydi, nolga bo’linadi. Odatda bunday xato dasturni
darhol to’xtatadi. try/except esa xatoni ushlab, dasturni qulatmasdan
davom ettirish imkonini beradi. Bu — Python asoslarining yakuniy darsi.
Xato dasturni qanday to’xtatadi
Avval xatosiz misolni ko’raylik. Foydalanuvchi son o’rniga matn kiritsa:
Foydalanuvchi yigirma deb yozsa, dastur ValueError beradi va to’xtaydi —
ikkinchi qator umuman ishlamaydi. Bu yomon tajriba: dastur “qulab tushdi”.
try va except
try ichiga xato bo’lishi mumkin bo’lgan kodni yozamiz, except esa xato
yuz berganda nima qilishni belgilaydi:
Kiritish maydoniga yigirma deb yozib ishga tushiring — dastur
“Iltimos, son kiriting.” deb javob beradi.
Dastur qulamadi — u xatoni “ushlab oldi” va tushunarli xabar berdi. try
ichida xato bo’lmasa, except umuman ishlamaydi.
Xato turlari
Har xato o’z turiga ega. Aynan qaysi turni ushlashni ko’rsatish mumkin:
| Xato turi | Qachon chiqadi |
|---|---|
ValueError |
Noto’g’ri qiymat (int("salom")) |
ZeroDivisionError |
Nolga bo’lish (5 / 0) |
TypeError |
Mos kelmaydigan turlar ("a" + 5) |
KeyError |
Lug’atda yo’q kalit |
IndexError |
Ro’yxatda yo’q indeks |
Nolga bo’lishni ushlaymiz:
Bir try ga bir nechta except yozib, har xatoga alohida javob berish
mumkin. Python mos turdagi except ni tanlaydi.
else va finally
try ga ikkita qo’shimcha blok bor:
else— xato bo’lmagandagina ishlaydi.finally— xato bo’ldi-bo’lmadi, doim ishlaydi.
Ikkala holatni sinab ko’ring — avval 5, so’ng salom kiriting:
| Kiritilgan | Natija |
|---|---|
5 |
Rahmat! Kvadrati: 25 + Dastur yakunlandi. |
salom |
Bu son emas. + Dastur yakunlandi. |
finally ikkala holatda ham ishladi — u odatda tozalash ishlari (fayl
yopish, ulanishni uzish) uchun ishlatiladi.
Amaliy misol: ishonchli so’rov
try/except ni while bilan birlashtirib,
foydalanuvchi to’g’ri son kiritmaguncha qayta so’rasak bo’ladi:
while True:
try:
yosh = int(input("Yoshingiz: "))
break
except ValueError:
print("Xato! Iltimos, butun son kiriting.")
print(f"Sizning yoshingiz: {yosh}")
To’g’ri son kiritilsa break sikldan chiqadi; xato bo’lsa, xabar chiqib
qayta so’raladi. Bu — real dasturlardagi eng keng tarqalgan naqshlardan biri.
Bu blokni terminalda, o’z kompyuteringizda sinang: u foydalanuvchi javob berishini cheksiz kutadi, shu sababli yuqoridagi bloklar kabi shu yerda ishga tushirilmaydi.
Amaliy mashq
Xatolarni ushlaydigan kalkulyator yozing:
- Foydalanuvchidan ikkita son so’rang;
tryichida ularniint()bilan aylantiring va bo’ling;ValueErrorni ushlab, “Faqat son kiriting” xabarini chiqaring;ZeroDivisionErrorni alohida ushlang;elseblokida natijani chiqaring,finallyda “Tugadi” deb yozing.
Harf kiritib, so’ng nolga bo’lib ko’ring — har ikki holatda finally
ishladimi?
Qisqacha xulosa
- Ushlanmagan xato dasturni darhol to’xtatadi;
try/exceptuni ushlab, davom ettiradi. try— xavfli kod,except <tur>— xato yuz berganda bajariladigan kod.- Aniq turni ko’rsating (
except ValueError:) — bo’shexcept:yozmang. - Bir
tryga bir nechtaexceptyozish mumkin. else— xatosiz holatda,finally— har doim ishlaydi.
Tabriklaymiz — Python asoslarini yakunladingiz! O’zgaruvchidan tortib funksiya, kolleksiya va xatolarni ushlashgacha o’rgandingiz. Bu bilim bilan allaqachon foydali dasturlar yoza olasiz. Keyingi bosqichda O’rta daraja — obyektga yo’naltirilgan dasturlash (OOP), fayllar bilan ishlash va boshqa kuchli vositalarni ko’ramiz.