AXV

try/except va istisnolar

Istisno turlari, try/except, aniq exception, else va finally, kiritishni tekshirish

9-sinfAdvanced Back-end va DevOps6-hafta · 17-dars

Bugun nimalarni o'rganamiz?

Istisno nima?

Dastur yiqilganda

try / except

Xatoni ushlash

Kiritishni tekshirish

To'g'ri bo'lguncha so'rash

Takrorlash

Funksiya natijani qaysi operator bilan qaytaradi?

return.
01

Istisno nima?

Dastur yiqilganda

Istisno yo'li

Xato yuzberadi Python istisnochiqaradi Ushlanmasa:to'xtaydi Ushlansa:davom etadi Traceback — xatoning xaritasi

Odatiy istisnolar


int("abc")            # ValueError
10 / 0                # ZeroDivisionError
[1, 2, 3][5]          # IndexError
{"a": 1}["b"]         # KeyError
open("yoq.txt")       # FileNotFoundError
"5" + 3               # TypeError
  
Traceback ni o'qishdan qo'rqmang: oxirgi qator — nima bo'ldi, yuqoridagi qatorlar — qayerda bo'ldi. Xato xabarini Google'ga yozish — dasturchining kundalik odati.

Mini-test

int("abc") qaysi istisnoni chiqaradi?

Matnni songa aylantirib bo'lmaydi: ValueError.
02

try / except

Xatoni ushlash

try tuzilishi

try:xavfli kod except: xatoda else: xatosizbo'lsa finally: doim Aniq istisnoni ushlang

Xavfsiz bo'lish


def bol(a, b):
    try:
        natija = a / b
    except ZeroDivisionError:
        return "Xato: 0 ga bo'lib bo'lmaydi!"
    except TypeError:
        return "Xato: sonlar kerak."
    else:
        return natija
    finally:
        print("hisob tugadi")

print(bol(10, 2))        # hisob tugadi / 5.0
print(bol(5, 0))         # hisob tugadi / Xato: 0 ga bo'lib bo'lmaydi!
print(bol("a", 2))       # hisob tugadi / Xato: sonlar kerak.
  
Hamma narsani bitta except: bilan ushlamang: dasturdagi haqiqiy xato yashirinib qoladi va uni topish qiyinlashadi.

Mini-test

finally bloki qachon ishlaydi?

finally — doim.
03

Kiritishni tekshirish

To'g'ri bo'lguncha so'rash

Kiritish sikli

while True try:int(input()) Qoidabuzilsa: raise except: xabarva qayta To'g'ri qiymat — return

Yosh so'raydigan funksiya


def yosh_ol():
    while True:
        matn = input("Yoshingiz: ")
        try:
            yosh = int(matn)
            if yosh < 0:
                raise ValueError("manfiy")
            return yosh
        except ValueError:
            print("Xato: 0 yoki undan katta butun son kiriting.")

yosh = yosh_ol()
print("Siz kiritdingiz:", yosh)
  
raise ValueError(...) va int("abc") ikkalasi ham ValueError: shuning uchun bitta except ikkala holatni ushlaydi.

Mini-test

while True + try andozasi nima uchun kerak?

To'g'ri bo'lguncha qayta so'raydi.

try/except va oddiy kod

Oddiy kod

Xato bo'lsa dastur to'xtaydi (Traceback)
VS

try/except

Xato ushlanadi, tushunarli xabar beriladi, dastur davom etadi

Tashqi ma'lumotga ishonmang: tekshiring.

Atamalar. Bosing

Istisno

bosing

Dastur ishlashdagi kutilmagan holat

Traceback

bosing

Xato haqida to'liq xabar

except

bosing

Xatoni ushlash bloki

finally

bosing

Doim ishlaydigan blok

Xatoga chidamli kod

1. Xavfni toping

Qayerda xato bo'lishi mumkin?

2. try/except

Aniq istisnoni ushlang.

3. Qayta so'rang

while True bilan.

Odatiy istisnolar

IstisnoQachonMisol
ValueErrorQiymat noto'g'riint("abc")
ZeroDivisionError0 ga bo'lish10 / 0
IndexErrorIndeks yo'q[1][5]
KeyErrorKalit yo'qd["x"]
FileNotFoundErrorFayl topilmadiopen("yoq.txt")

Pastga bosing: istisnolar

Xavfsiz kalkulyator

  1. Ikkita son so'rang va bo'ling; ValueError va ZeroDivisionError ni alohida ushlang.
  2. Natijani else da chiqaring, «tugadi» xabarini finally da chiqaring.
  3. To'g'ri son kiritilguncha qayta so'raydigan son_ol() funksiyasini yozing.

Istisnoni ushlash


try:
    x = int(matn)
except:
    pass
  

Istisnoni ushlash


try:
    x = int(matn)
except ValueError:
    print("Butun son kiriting")
  

Istisnolar raqamlarda

0
odatiy istisno turi o'rganildi
0
blok: try, except, else, finally
0
qoida: aniq istisnoni ushlang

Xato — signal, uni boshqaring.

Amaliy topshiriq 20 daqiqa

OsonXato turini toping: int("12a") qaysi istisnoni chiqaradi?
OsonValueError ni ushlang: Foydalanuvchi qiymatini songa aylantiring; xato bo'lsa «Butun son kiriting» chiqsin.
O'rta0 ga bo'lish: Ikki sonni bo'ling; 0 ga bo'lishda «0 ga bo'lib bo'lmaydi!» chiqsin.
O'rtaelse va finally: Oldingi funksiyaga else va finally qo'shing («hisob tugadi» doim chiqsin).
QiyinYosh so'rash: To'g'ri yosh (0 dan katta yoki teng butun son) kiritilguncha so'rang.
BonusLug'at kaliti: d["x"] KeyError bermasligi uchun ikki usulni yozing.

Dars xulosasi

Istisno

Turi, Traceback, sabab.

try/except

Aniq istisno, else, finally.

Kiritish

while True va raise.

Uyga vazifa: Xavfsiz kalkulyator va kiritishni tekshirish.

Keyingi dars: Fayllar bilan ishlash

open, with, read va write

6-hafta · 18-dars