⬅️ Bosh sahifaga

🛡️Error Handling in Python

try, except, finally bloklari orqali xatolarni boshqarish

🚀Kirish va Xatolarni Boshqarish

Assalomu alaykum, yosh dasturchilar! 😊 Bugun biz Python’da xatolarni boshqarish, ya’ni error handling haqida o‘rganamiz. Xatolarni boshqarish dasturimizning ishonchli ishlashi uchun juda muhim.

Dastur yozganimizda ba’zida xatolar (errors) yuzaga keladi. Masalan, foydalanuvchi noto‘g‘ri ma’lumot kiritsa yoki fayl topilmasa, dastur to‘xtab qolishi mumkin. Xatolarni boshqarish yordamida bunday holatlarni nazorat qilib, dasturni to‘xtatmasdan davom ettirish mumkin.

Oddiy xato misoli: Nolga bo'lish

son1 = 10
son2 = 0
natija = son1 / son2  # ZeroDivisionError: division by zero

Bu kod ishlaganda ZeroDivisionError xatosi chiqadi va dastur to‘xtaydi. Xatolarni boshqarish yordamida bunday xatolarni "ushlab qolib", foydalanuvchiga xabar berish mumkin.

💡 Nima uchun xatolarni boshqarish kerak?

Xatolarni boshqarish dasturning kutilmagan vaziyatlarda to'xtab qolishining oldini oladi va foydalanuvchiga tushunarli xabar berish imkonini yaratadi. Bu dasturning barqaror (stable) va ishonchli (reliable) ishlashini ta'minlaydi.

🎯 Mashq: Xatoni kuzating

Quyidagi kodni yozing va qanday xato chiqishini o'z ko'zingiz bilan ko'ring.

son = 5 / 0

🥅try va except bloklari

try blokida xato yuzaga kelishi mumkin bo‘lgan kod yoziladi, except blokida esa xato yuzaga kelsa nima qilish kerakligi belgilanadi.

Nolga bo'lish xatosini ushlash

try:
    son1 = 10
    son2 = 0
    natija = son1 / son2
    print(natija)
except ZeroDivisionError:
    print("Xato: Nolga bo‘lish mumkin emas!")

# Natija: Xato: Nolga bo‘lish mumkin emas!

Bir nechta xatolarni ushlash

Ba’zida turli xatolar yuzaga kelishi mumkin. Bunday hollarda bir nechta except blokidan foydalanamiz:

try:
    son = int(input("Son kiriting: "))
    natija = 10 / son
    print(natija)
except ZeroDivisionError:
    print("Xato: Nolga bo‘lish mumkin emas!")
except ValueError:
    print("Xato: Faqat son kiritish kerak!")

Umumiy xatolarni ushlash

Agar xato turini aniq bilmasak, umumiy Exception sinfidan foydalanamiz. as kalit so'zi yordamida xato haqida batafsil ma'lumot olish mumkin.

try:
    son = int(input("Son kiriting: "))
    natija = 10 / son
    print(natija)
except Exception as e:
    print(f"Kutilmagan xato yuzaga keldi: {e}")

🎮 Interaktiv Demo: Xatolarni ushlab ko'ring

100 sonini siz kiritgan songa bo'lishga harakat qilamiz. '0' yoki 'salom' kabi qiymatlarni kiritib sinab ko'ring.

🧹finally va Xatolarni Aniqlash

finally bloki try-except tuzilmasida har doim ishlaydi — xato bo‘ladimi yoki yo‘qmi, farqi yo‘q. Bu odatda resurslarni tozalash (masalan, faylni yopish) uchun juda foydali.

finally bloki misoli

try:
    son = 10 / 2
    print(son) # Natija: 5.0
except ZeroDivisionError:
    print("Xato: Nolga bo‘lish mumkin emas!")
finally:
    print("Bu xabar har doim chiqadi!")

Agar xato yuzaga kelsa ham finally bloki ishga tushadi:

try:
    son = 10 / 0
    print(son)
except ZeroDivisionError:
    print("Xato: Nolga bo‘lish mumkin emas!") # Shu yer ishlaydi
finally:
    print("Bu xabar har doim chiqadi!") # Va bu yer ham ishlaydi

Xato haqida ma'lumot olish

except blokida xato haqida batafsil ma’lumot olish uchun as kalit so‘zidan foydalanamiz:

try:
    royxat = [1, 2, 3]
    print(royxat[5])  # IndexError
except IndexError as xato:
    print(f"Xato turi: IndexError. Xabar: {xato}")

# Natija: Xato turi: IndexError. Xabar: list index out of range

🎮 Interaktiv Demo: finally blokini sinab ko'ring

Ro'yxatdan (`[10, 20, 30]`) siz kiritgan indeksdagi elementni olishga harakat qilamiz. '1' (to'g'ri) va '5' (noto'g'ri) indekslarini kiritib ko'ring.

🏋️Amaliy mashqlar

Endi o‘rganganlarimizni amalda sinab ko‘ramiz! Quyidagi mashqlarni bajaring.

Mashq 1: try va except

Foydalanuvchidan son kiritishni so‘rang va uni 100 ga bo‘ling. ZeroDivisionError va ValueError xatolarini ushlab, mos xabarni chiqaring.

try:
    son = int(input("Son kiriting: "))
    natija = 100 / son
    print(f"Natija: {natija}")
except ZeroDivisionError:
    print("Xato: Nolga bo‘lish mumkin emas!")
except ValueError:
    print("Xato: Faqat son kiritish kerak!")

Mashq 2: Bir nechta xato

Foydalanuvchidan ro‘yxat indeksini so‘rang (royxat = [10, 20, 30]) va elementni chiqaring. IndexError va ValueError xatolarini ushlab, mos xabarni chiqaring.

royxat = [10, 20, 30]
try:
    indeks = int(input("Indeks kiriting: "))
    print(royxat[indeks])
except IndexError:
    print("Xato: Indeks ro‘yxatda mavjud emas!")
except ValueError:
    print("Xato: Faqat butun son kiritish kerak!")

Mashq 3: finally bloki

son = 15 o‘zgaruvchisini 3 ga bo‘ling. ZeroDivisionError xatosini ushlang va finally bloki yordamida “Amaliyot tugadi” deb chiqaring.

try:
    son = 15
    natija = son / 3
    print(natija)
except ZeroDivisionError:
    print("Xato: Nolga bo‘lish mumkin emas!")
finally:
    print("Amaliyot tugadi")

🎉Xulosa va Uy Vazifasi

Ajoyib, yosh dasturchilar! Bugun biz Python’da xatolarni boshqarishning muhim vositalari — try, except, va finally bloklarini o‘rgandik. Endi sizning dasturlaringiz kutilmagan xatolarga nisbatan ancha chidamli va ishonchli bo'ladi.

📌 Asosiy xulosalar:

  • try: Xato kelib chiqishi mumkin bo'lgan kodni shu blok ichiga yozamiz.
  • except: Agar `try` blokida xato yuz bersa, `except` bloki ishga tushadi.
  • finally: Bu blok har doim — xato bo'lsa ham, bo'lmasa ham — ishlaydi.
  • Exception as e: Xato haqida batafsil ma'lumot olish imkonini beradi.

📚 Uyga vazifa

  1. Foydalanuvchidan son kiritishni so‘rang va uni 50 ga bo‘ling. `ZeroDivisionError` va `ValueError` xatolarini alohida ushlab, mos xabar chiqaring.
  2. `royxat = [5, 10, 15]` ro‘yxatidan foydalanuvchi kiritgan indeksdagi elementni chiqaring. `IndexError` va `ValueError` xatolarini ushlang.
  3. Foydalanuvchidan ikki son kiritishni so‘rab, ularni bo‘ling. `ZeroDivisionError` xatosini ushlang va `finally` bloki yordamida “Hisoblash yakunlandi” deb chiqaring.

Keyingi darsda esa Funksiyalar: Definition, arguments, return operatori mavzusini o‘rganamiz.

🤔Qayta ko'rib chiqish va Savollar

Ajoyib ish qildingiz! Endi o'rganganlarimizni mustahkamlab olamiz. Bugungi darsda nimalarni o‘rgandik?

🧐 try va except bloklari qanday ishlaydi?

try bloki kodni "sinab ko'radi", agar xato chiqsa, dasturni to'xtatmasdan, boshqaruvni mos except blokiga o'tkazadi.

🤨 finally bloki qachon ishlaydi?

finally bloki har doim, istisnosiz ishga tushadi: `try` bloki muvaffaqiyatli yakunlansa ham, `except` bloki ishga tushsa ham.

🤓 Xatolarni boshqarish qachon foydali?

Foydalanuvchi kiritadigan ma'lumotlarni tekshirishda, fayllar bilan ishlashda, tarmoqqa ulanishda va dastur barqarorligini ta'minlash kerak bo'lgan har qanday vaziyatda.

💬 Savollaringiz bormi?

Qandaydir tushunmovchiliklar qoldimi? Hozir muhokama qilish uchun ayni vaqti. Bemalol savollaringizni bering! 😊