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 : 55finally
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