Python dasturlash tilida istisnolar bilan ishlash

2023 Avg 13, 01:12 • Khusanboy Sobirjonov (@uzbek_coder_2022)
Mavzu qisqacha mazmuni

Kodimizda xatolik yoki istisno holatlar yuz bersa, boshqa dasturlash tillarida bo'lgani kabi Python dasturlash tilida ham bular haqida xabar beradi. Bunday holatlar bilan ishlash uchun try va except instruksiyasidan foydalaniladi.

Lug'at (kalit so'zlar)

try - harakat qilib ko'ring

except - mustasno holat, sinab ko'rish

else - aks holda

raise - oshirish

finally - nihoyat

try va except

Sintaksis :

try:
   # kod bloki
except:
  # kod bloki
  # Agar xato bo'lsa bajariladi

Yozgan kodlarimiz bajarilish vaqtida hech qanday xatolik va istisnolarsiz davom etadi deb doimo ayta olmaymiz ya'ni biz inobatga olib ketmagan holatlar borki, ular kodimiz bajarilish vaqtida to'xtashiga olib keladi. Shunday vaqtlarda try va except dan foydalanish yaxshiroqdir. Albatta, xatolarimizni boshqa yo'l bilan to'g'rilashga yaxshi imkon topilmasa. try ichiga biz o'z kodimizni joylashtiramiz va agarda qandaydir xato yuz berganda yoki istisnoli holat vujudga kelganda bu blok ishi to'xtatiladi hamda except blokiga jarayon uzatiladi.

except orqali umumiy yoki qanday istisnoli holat vujudga kelgani tekshirishimiz va shu holatdagi jarayonda nima vazifa bajarilishini belgilab qo'ya olamiz. Bunday holatlarning turlari ko'p, biz ularning barini sanab o'ta olmaymiz, ammo quyidagi kod orqali ularning ro'yxatini ko'ra olamiz.

print(dir(locals()['__builtins__']))

Barcha holatlar uchun istisno sintaksis bo'yicha :

try:
  lst = [1, 2, 3]
  lst[3] = 5
except:
  print("Dasturda xatolik bor.")

Endi ko'p uchraydigan ba'zi bir istisnolarni misollar orqali ko'rib o'tsak,

ZeroDivisionError

try:
  ans = 5 / 0
except ZeroDivisionError:
  print("Nolga bo'lish mumkin emas.")

ValueError

try:
  num = int('0X101')
except ValueError:
  print("Qiymat butun son emas.")
 else

Pythonda siz try-except blokidagi else bandidan ham foydalanishingiz mumkin, u barcha istisnolardan keyin bo'lishi kerak. Kod else blokiga faqat try bandi istisno keltirmasa kiradi. Quyidagi misol bunga misol bo'ladi :

try:
   def Sum(num: int) -> int:
     if num < 1:
       return 0
     return num + Sum(num - 1)
   value = Sum(10)
except RecursionError:
   print('Rekursiyada chaqiruvlar soni 1000 talik limitdan oshib ketdi')
else:
   print(f"Hech qanday xatolik vujudga kelmadi. Natija : {value}")
finally:
   print('Dastur yakunlandi.') 

Dastur ishlagan vaqtda quyidagicha natija chiqadi :

Hech qanday xatolik vujudga kelmadi. Natija : 55
finally

Python finally kalit so'zini taqdim etadi, u har doim urinishdan keyin va bloklardan tashqari bajariladi. Yakuniy blok har doim sinab ko'rish bloki try normal tugatilgandan so'ng yoki ba'zi istisnolar tufayli sinab ko'rish bloki except tugatilgandan keyin bajariladi.

try:
  def Sum(num: int) -> int:
    if num < 1:
      return 0
    return num + Sum(num - 1)
  value = Sum(10)
except RecursionError:
  print('Rekursiyada chaqiruvlar soni 1000 talik limitdan oshib ketdi')
else:
  print(f"Hech qanday xatolik vujudga kelmadi.
Natija : {value}")
finally:
  print('Dastur yakunlandi.')

Dastur ishlagan vaqtda quyidagicha natija chiqadi :

Hech qanday xatolik vujudaga kelmadi.

Natija : 55 Dastur yakunlandi.
raise

Yozgan kodimizda o'zimiz ham boshqa istisno holatini tuzishimiz mumkin. Buning uchun raise kalit so'zini ishlatamiz. Sintaksisi :

raise Exception(“Xabar”)

num = -5
if num < 0:
  raise Exception("O'zgaruvchi qiymati musbat butun son emas.")
print(num)

Dastur ishlagan vaqtda quyidagicha natija chiqadi :

Exception: O'zgaruvchi qiymati musbat butun son emas.

Biz oldin ko'rib o'tgan ro'yxatdagi istisnolardan ham foydalana olamiz. Masalan,

num = -5
if type(num) is not float:
  raise TypeError("Qiymat haqiqiy son bo'lishi kerak")
print(num)

Dastur ishlagan vaqtda quyidagicha natija chiqadi :

TypeError: Qiymat haqiqiy son bo'lishi kerak


1490 marta ko'rildi
Khusanboy Sobirjonov - uzbekdevs photo

Khusanboy Sobirjonov

@uzbek_coder_2022

Telegram Post

@uzbekdevs
“uzbekdevs.uz” saytida eʼlon qilingan materiallardan nusxa koʻchirish, tarqatish va boshqa shakllarda foydalanish faqat manba ko'rsatilishi orqali amalga oshirilishi mumkin.
© UzbekDevs