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:

Python

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:

Python

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:

Python

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.
Python

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:

  1. Foydalanuvchidan ikkita son so’rang;
  2. try ichida ularni int() bilan aylantiring va bo’ling;
  3. ValueError ni ushlab, “Faqat son kiriting” xabarini chiqaring;
  4. ZeroDivisionError ni alohida ushlang;
  5. else blokida natijani chiqaring, finally da “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/except uni ushlab, davom ettiradi.
  • try — xavfli kod, except <tur> — xato yuz berganda bajariladigan kod.
  • Aniq turni ko’rsating (except ValueError:) — bo’sh except: yozmang.
  • Bir try ga bir nechta except yozish 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.

Bu dars foydali bo'ldimi?

marta ko'rildi