Xatoliklar (Exceptions) bilan tanishish
Xatolik (exception) — dastur bajarilishi davomida yuz beradigan kutilmagan hodisa. Masalan,
divide_by_zero = 7 / 0
Yuqoridagi kod xatolikka sabab bo'ladi, chunki sonni 0ga bo'lish mumkin emas.
Keling, Python xatoliklari haqida batafsil o'rganamiz.
Ishga tushirish vaqtida (runtime) yuz beradigan xatoliklar (sintaksis tekshiruvidan o'tgandan keyin) xatoliklar (exceptions) yoki mantiqiy xatolar deb ataladi.
Masalan, ular quyidagi hollarda yuz beradi:
FileNotFoundError)ZeroDivisionError)ImportError) va hokazo.Bunday runtime xatoliklari yuz berganda, Python xatolik obyektini yaratadi.
Agar to'g'ri boshqarilmasa, u xatolikka oid traceback'ni, xatolik nima uchun yuz berganiga oid ba'zi tafsilotlar bilan birga chop etadi.
Keling, Python bu xatoliklarni qanday ko'rib chiqishiga qaraymiz:
divide_numbers = 7 / 0
print(divide_numbers)
Natija
Traceback (most recent call last):
File "<string>", line 1, in <module>
ZeroDivisionError: division by zero
Bu yerda, 7 / 0ni bo'lishga urinayotganda, dastur ZeroDivisionError tizim xatoligini tashlaydi.
Noqonuniy amallar xatoliklarni keltirib chiqarishi mumkin. Pythonda mos xatolar yuz berganda tashlanadigan ko'plab tayyor xatoliklar mavjud.
Barcha tayyor xatoliklarni tayyor locals() funksiyasi yordamida quyidagicha ko'rishimiz mumkin:
print(dir(locals()['__builtins__']))
Bu yerda, locals()['__builtins__'] tayyor xatoliklar, funksiyalar va atributlar modulini qaytaradi, dir esa bizga bu atributlarni satrlar sifatida ro'yxatlash imkonini beradi.
Python dasturlashdagi ba'zi keng tarqalgan tayyor xatoliklar va ularni keltirib chiqaradigan xato quyida keltirilgan:
| Xatolik | Xatoning sababi |
|---|---|
AssertionError | assert operatori muvaffaqiyatsiz bo'lganda tashlanadi. |
AttributeError | Atributni belgilash yoki unga murojaat qilish muvaffaqiyatsiz bo'lganda tashlanadi. |
EOFError | input() funksiyasi fayl oxiriga (end-of-file) yetganda tashlanadi. |
FloatingPointError | Kasr nuqtali amal muvaffaqiyatsiz bo'lganda tashlanadi. |
GeneratorExit | Generatorning close() metodi chaqirilganda tashlanadi. |
ImportError | Import qilinayotgan modul topilmaganda tashlanadi. |
IndexError | Ketma-ketlikning indeksi oraliqdan tashqarida bo'lsa tashlanadi. |
KeyError | Lug'atda kalit topilmasa tashlanadi. |
KeyboardInterrupt | Foydalanuvchi to'xtatish tugmasini bossa (Ctrl+C yoki Delete) tashlanadi. |
MemoryError | Amal xotira yetishmasligiga duch kelsa tashlanadi. |
NameError | O'zgaruvchi lokal yoki global ko'lamda topilmasa tashlanadi. |
NotImplementedError | Abstrakt metodlar tomonidan tashlanadi. |
OSError | Tizim amali tizimga oid xatolikka sabab bo'lsa tashlanadi. |
OverflowError | Arifmetik amal natijasi ifodalash uchun juda katta bo'lsa tashlanadi. |
ReferenceError | Zaif havola (weak reference) proksisi axlat yig'uvchi tomonidan tozalangan obyektga murojaat qilish uchun ishlatilsa tashlanadi. |
RuntimeError | Xatolik boshqa hech qanday toifaga to'g'ri kelmasa tashlanadi. |
StopIteration | next() funksiyasi iterator tomonidan qaytariladigan boshqa element yo'qligini bildirish uchun tashlaydi. |
SyntaxError | Sintaksis xatoligiga duch kelinganda parser tomonidan tashlanadi. |
IndentationError | Noto'g'ri chekinish bo'lsa tashlanadi. |
TabError | Chekinish nomuvofiq tab va bo'shliqlardan iborat bo'lsa tashlanadi. |
SystemError | Interpretator ichki xatoni aniqlasa tashlanadi. |
SystemExit | sys.exit() funksiyasi tomonidan tashlanadi. |
TypeError | Funksiya yoki amal noto'g'ri turdagi obyektga qo'llanilsa tashlanadi. |
UnboundLocalError | Funksiya yoki metod ichida lokal o'zgaruvchiga murojaat qilinsa, lekin unga hech qanday qiymat bog'lanmagan bo'lsa tashlanadi. |
UnicodeError | Unicode bilan bog'liq kodlash yoki dekodlash xatoligi yuz bersa tashlanadi. |
UnicodeEncodeError | Kodlash (encoding) paytida Unicode bilan bog'liq xatolik yuz bersa tashlanadi. |
UnicodeDecodeError | Dekodlash (decoding) paytida Unicode bilan bog'liq xatolik yuz bersa tashlanadi. |
UnicodeTranslateError | Tarjima qilish (translating) paytida Unicode bilan bog'liq xatolik yuz bersa tashlanadi. |
ValueError | Funksiya to'g'ri turdagi, lekin noto'g'ri qiymatli argument olsa tashlanadi. |
ZeroDivisionError | Bo'lish yoki modul amalining ikkinchi operandi nolga teng bo'lsa tashlanadi. |
Agar kerak bo'lsa, Pythonda o'zimizning xatoliklarimizni ham aniqlashimiz mumkin. Ular haqida ko'proq bilish uchun, Python User-defined Exceptions sahifasiga tashrif buyuring.
Biz bu tayyor va foydalanuvchi belgilagan xatoliklarni Pythonda try, except va finally operatorlari yordamida boshqarishimiz mumkin. Ular haqida ko'proq bilish uchun, Python try, except and finally statements sahifasiga tashrif buyuring.
Xatolar (errors) kompilyatsiya xatosi, sintaksis xatosi, koddagi mantiqiy qismdagi xato, kutubxona mos kelmasligi, cheksiz rekursiya va h.k. kabi holatlarni ifodalaydi.
Xatolar odatda dasturchining nazoratidan tashqarida bo'ladi va biz xatolarni boshqarishga urinmasligimiz kerak.
Xatoliklar (exceptions) esa dastur tomonidan ushlanishi va boshqarilishi mumkin.
Endi xatoliklar haqida bilganimizdan so'ng, keyingi darsda xatoliklarni boshqarishni o'rganamiz.