try, except, finally bloklari orqali 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.
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.
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.
Quyidagi kodni yozing va qanday xato chiqishini o'z ko'zingiz bilan ko'ring.
son = 5 / 0
try blokida xato yuzaga kelishi mumkin bo‘lgan kod yoziladi, except blokida esa xato yuzaga kelsa nima qilish kerakligi belgilanadi.
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!
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!")
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}")
100 sonini siz kiritgan songa bo'lishga harakat qilamiz. '0' yoki 'salom' kabi qiymatlarni kiritib sinab ko'ring.
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.
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
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
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.
Endi o‘rganganlarimizni amalda sinab ko‘ramiz! Quyidagi mashqlarni bajaring.
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!")
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!")
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")
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.
Keyingi darsda esa Funksiyalar: Definition, arguments, return operatori mavzusini o‘rganamiz.
Ajoyib ish qildingiz! Endi o'rganganlarimizni mustahkamlab olamiz. Bugungi darsda nimalarni o‘rgandik?
try bloki kodni "sinab ko'radi", agar xato chiqsa, dasturni to'xtatmasdan, boshqaruvni mos except blokiga o'tkazadi.
finally bloki har doim, istisnosiz ishga tushadi: `try` bloki muvaffaqiyatli yakunlansa ham, `except` bloki ishga tushsa ham.
Foydalanuvchi kiritadigan ma'lumotlarni tekshirishda, fayllar bilan ishlashda, tarmoqqa ulanishda va dastur barqarorligini ta'minlash kerak bo'lgan har qanday vaziyatda.
Qandaydir tushunmovchiliklar qoldimi? Hozir muhokama qilish uchun ayni vaqti. Bemalol savollaringizni bering! 😊