30 / 59

Python Exceptions

Xatoliklar (Exceptions) bilan tanishish

Xatolik (exception) — dastur bajarilishi davomida yuz beradigan kutilmagan hodisa. Masalan,

example.py
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.

Python mantiqiy xatoliklari (Exceptions)

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:

  • mavjud bo'lmagan faylni (o'qish uchun) ochishga urinishda (FileNotFoundError)
  • sonni nolga bo'lishga urinishda (ZeroDivisionError)
  • mavjud bo'lmagan modulni import qilishga urinishda (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:

example.py
divide_numbers = 7 / 0
print(divide_numbers)

Natija

kod
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.

Pythonning tayyor (Built-in) xatoliklari

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:

example.py
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:

XatolikXatoning sababi
AssertionErrorassert operatori muvaffaqiyatsiz bo'lganda tashlanadi.
AttributeErrorAtributni belgilash yoki unga murojaat qilish muvaffaqiyatsiz bo'lganda tashlanadi.
EOFErrorinput() funksiyasi fayl oxiriga (end-of-file) yetganda tashlanadi.
FloatingPointErrorKasr nuqtali amal muvaffaqiyatsiz bo'lganda tashlanadi.
GeneratorExitGeneratorning close() metodi chaqirilganda tashlanadi.
ImportErrorImport qilinayotgan modul topilmaganda tashlanadi.
IndexErrorKetma-ketlikning indeksi oraliqdan tashqarida bo'lsa tashlanadi.
KeyErrorLug'atda kalit topilmasa tashlanadi.
KeyboardInterruptFoydalanuvchi to'xtatish tugmasini bossa (Ctrl+C yoki Delete) tashlanadi.
MemoryErrorAmal xotira yetishmasligiga duch kelsa tashlanadi.
NameErrorO'zgaruvchi lokal yoki global ko'lamda topilmasa tashlanadi.
NotImplementedErrorAbstrakt metodlar tomonidan tashlanadi.
OSErrorTizim amali tizimga oid xatolikka sabab bo'lsa tashlanadi.
OverflowErrorArifmetik amal natijasi ifodalash uchun juda katta bo'lsa tashlanadi.
ReferenceErrorZaif havola (weak reference) proksisi axlat yig'uvchi tomonidan tozalangan obyektga murojaat qilish uchun ishlatilsa tashlanadi.
RuntimeErrorXatolik boshqa hech qanday toifaga to'g'ri kelmasa tashlanadi.
StopIterationnext() funksiyasi iterator tomonidan qaytariladigan boshqa element yo'qligini bildirish uchun tashlaydi.
SyntaxErrorSintaksis xatoligiga duch kelinganda parser tomonidan tashlanadi.
IndentationErrorNoto'g'ri chekinish bo'lsa tashlanadi.
TabErrorChekinish nomuvofiq tab va bo'shliqlardan iborat bo'lsa tashlanadi.
SystemErrorInterpretator ichki xatoni aniqlasa tashlanadi.
SystemExitsys.exit() funksiyasi tomonidan tashlanadi.
TypeErrorFunksiya yoki amal noto'g'ri turdagi obyektga qo'llanilsa tashlanadi.
UnboundLocalErrorFunksiya yoki metod ichida lokal o'zgaruvchiga murojaat qilinsa, lekin unga hech qanday qiymat bog'lanmagan bo'lsa tashlanadi.
UnicodeErrorUnicode bilan bog'liq kodlash yoki dekodlash xatoligi yuz bersa tashlanadi.
UnicodeEncodeErrorKodlash (encoding) paytida Unicode bilan bog'liq xatolik yuz bersa tashlanadi.
UnicodeDecodeErrorDekodlash (decoding) paytida Unicode bilan bog'liq xatolik yuz bersa tashlanadi.
UnicodeTranslateErrorTarjima qilish (translating) paytida Unicode bilan bog'liq xatolik yuz bersa tashlanadi.
ValueErrorFunksiya to'g'ri turdagi, lekin noto'g'ri qiymatli argument olsa tashlanadi.
ZeroDivisionErrorBo'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.

Python xatosi (Error) va xatoligi (Exception)

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.

QBilimingizni sinab ko'ring
1 / 3

1. Sonni nolga bo'lishga urinilganda qanday xatolik yuz beradi?