Darsliklar Python Try Except

Python Python Try Except

Xatolarni boshqarish (Try Except) — havaskor dasturchini professionaldan ajratib turadigan mavzu. Har qanday dastur xato bilan uchrashadi: foydalanuvchi noto’g’ri ma’lumot kiritadi, fayl topilmaydi, internet uziladi. Yaxshi dastur bunda “qulab tushmaydi”, balki xatoni ushlab, oqilona javob beradi.

Istisno (exception)dastur ishlashi davomida yuzaga keladigan xato holati. try-except konstruksiyasi bunday xatoni ushlab, dasturning butunlay to’xtab qolishining oldini oladi.

Muammo: ushlanmagan xato

Avval xatosiz dastur qanday “qulashini” ko’ramiz. Nolga bo’lishga urinaylik:

son = 10
print(son / 0)
print("Bu qator ishlamaydi")
ZeroDivisionError: division by zero

Dastur ZeroDivisionError bilan to’xtadi va oxirgi print umuman ishlamadi. Real ilovada bu — butun sahifaning ishdan chiqishi demakdir. Buni oldini olishimiz kerak.

Yechim: try — except

try blokiga xavfli kodni, except blokiga esa xato yuz berganda bajariladigan kodni yozamiz:

try:
    son = 10
    print(son / 0)
except ZeroDivisionError:
    print("Xato: nolga bo'lish mumkin emas")
print("Dastur davom etmoqda")
Xato: nolga bo'lish mumkin emas
Dastur davom etmoqda

Mana farqi: dastur qulamadi, xatoni “ushlab”, tushunarli xabar berdi va ishini davom ettirdi. Aynan shu — barqaror dasturning belgisi.

Turli xatolarni alohida ushlash

Har xil xato turini alohida ushlash mumkin. Keng tarqalgan xato turlarini jadvalda ko’ramiz:

Xato turi Qachon yuz beradi
ZeroDivisionError nolga bo’lishda
ValueError noto’g’ri qiymatda
TypeError mos kelmaydigan turda
KeyError lug’atda kalit yo’q bo’lsa
FileNotFoundError fayl topilmasa

Amalda bir necha except yozish mumkin:

try:
    yosh = int("salom")
except ValueError:
    print("Xato: butun son kiriting")
except ZeroDivisionError:
    print("Xato: nolga bo'lish")
Xato: butun son kiriting

"salom" ni songa aylantirib bo’lmagani uchun ValueError yuz berdi va aynan shu blok ishladi. Python xato turiga mos except ni o’zi tanlaydi.

else va finally

try konstruksiyasining to’liq shakli yana ikki blokka ega. else — xato bo’lmaganda, finally — har qanday holatda (xato bo’ladimi-yo’qmi) bajariladi:

try:
    natija = 10 / 2
except ZeroDivisionError:
    print("Xato yuz berdi")
else:
    print("Natija:", natija)
finally:
    print("Amal yakunlandi")
Natija: 5.0
Amal yakunlandi

finally bloki ayniqsa muhim — u fayl yopish, ulanishni tugatish kabi “tozalash” ishlarini har qanday holatda kafolatlaydi.

Amaliy misol: xavfsiz kiritish

Xatolarni boshqarish real hayotda foydalanuvchi ma’lumotini tekshirishda ishlatiladi:

def narxni_olish(matn):
    try:
        return float(matn)
    except ValueError:
        return 0

print(narxni_olish("15000"))
print(narxni_olish("noto'g'ri"))
15000.0
0

Bu naqsh foydalanuvchi kiritgan narxni xavfsiz qabul qilishda bebaho. Xato bo’lsa, dastur qulamaydi, oqilona standart qiymat qaytaradi.

Xulosa

Bu darsda try-except bilan xatoni ushlash, turli xato turlarini ajratish, else va finally bloklari hamda xavfsiz kiritishni o’rgandik. Xatolarni boshqarish — barqaror, ishonchli dastur yozishning kalitidir. Keyingi darsda fayllar bilan ishlashga kirib boramiz.