Asosiy qismga o‘tish

12. Xatolar va nosozliklarni topish

Nazariya

Uch xil xato

Sintaksis xatosi — Python kodni umuman tushunmadi. Dastur ishga
tushmaydi. Odatda qavs yopilmagan yoki ikki nuqta unutilgan.

Ishlash paytidagi xato (runtime) — kod to‘g‘ri yozilgan, lekin
bajarilishda muammo chiqdi: nolga bo‘lish, ro‘yxatdan tashqariga
chiqish, satrni songa aylantirib bo‘lmasligi.

Mantiqiy xato — dastur ishlaydi, lekin noto‘g‘ri javob beradi.
Eng qiyini: Python bu haqda hech narsa demaydi.

Ko‘p uchraydigan xabarlar

XatoSababi
SyntaxErrorqavs, ikki nuqta yoki tirnoq unutilgan
IndentationErrorchekinish noto‘g‘ri
NameErrornom e’lon qilinmagan (yoki xato yozilgan)
TypeErrormos kelmaydigan turlar: "5" + 5
ValueErrortur to‘g‘ri, qiymat noto‘g‘ri: int("abc")
IndexErrorro‘yxatdan tashqarida: a[10], a‘da 3 ta element
KeyErrorlug‘atda bunday kalit yo‘q
ZeroDivisionErrornolga bo‘lish
RecursionErrorrekursiya juda chuqur

Xabarning oxirgi qatori xato turini, undan yuqorisi esa qaysi
qatorda ekanini ko‘rsatadi. Shu ikkitasini o‘qish muammoning yarmini
hal qiladi.

Sudyadagi «Runtime xatosi»

Bu odatda: ro‘yxatdan tashqariga chiqish, nolga bo‘lish yoki juda
chuqur rekursiya. Chegaraviy holatlarni tekshiring: n = 1, bo‘sh
kirish, eng katta qiymat.

Xatoni ushlash

try:
    n = int(input())
except ValueError:
    n = 0

Musobaqada bu kamdan-kam kerak — u yerda kirish har doim to‘g‘ri
formatda beriladi.

Qanday tuzatish kerak

  1. Xato xabarini oxirigacha o‘qing.
  2. Ko‘rsatilgan qatorga qarang.
  3. Oraliq qiymatlarni chiqarib ko‘ring: print(i, a[i]).
  4. Kichik misolda sinab ko‘ring — 100 000 elementda emas, 3 tasida.
  5. Chegaraviy holatlarni alohida tekshiring.

Misol

a = [1, 2, 3]
try:
    print(a[5])
except IndexError:
    print('bunday indeks yo\'q')

Mashq masalalari

Nazorat savollari

1 `int("abc")` qanday xato beradi? Bitta to‘g‘ri javob
2 `"5" + 5` qanday xato beradi? Bitta to‘g‘ri javob
3 `a = [1, 2, 3]` bo‘lsa, `a[3]` nima beradi? Bitta to‘g‘ri javob
4 Sudyada «Runtime xatosi» chiqishining sabablari qaysilar bo‘lishi mumkin? Bir nechta to‘g‘ri javob

Bir nechta javob to‘g‘ri bo‘lishi mumkin.

5 Mantiqiy xatoni Python xato xabari bilan ko‘rsatadi. To‘g‘ri yoki noto‘g‘ri
6 Nima chiqadi? Kod nima chiqaradi
try:
    print(1 / 0)
except ZeroDivisionError:
    print('nolga bo\'linmaydi')
7 Xatoni ushlash uchun qaysi kalit so‘zlar juftligi ishlatiladi? Bo‘sh joyni to‘ldirish
____:
    n = int(input())
except ValueError:
    n = 0
8 Chekinish noto‘g‘ri bo‘lsa qanday xato chiqadi? (xato nomini yozing) Qisqa javob — yoziladi
9 Nosozlikni topishda birinchi qadam nima? Bitta to‘g‘ri javob
10 Dasturni katta kirishda emas, kichik misolda sinash nosozlikni topishni osonlashtiradi. To‘g‘ri yoki noto‘g‘ri

Javoblar serverda tekshiriladi. Katta-kichik harf, apostrof shakli va ortiqcha bo‘shliq ahamiyatsiz.