12. Xatolar va nosozliklarni topish
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
| Xato | Sababi |
|---|---|
SyntaxError | qavs, ikki nuqta yoki tirnoq unutilgan |
IndentationError | chekinish noto‘g‘ri |
NameError | nom e’lon qilinmagan (yoki xato yozilgan) |
TypeError | mos kelmaydigan turlar: "5" + 5 |
ValueError | tur to‘g‘ri, qiymat noto‘g‘ri: int("abc") |
IndexError | ro‘yxatdan tashqarida: a[10], a‘da 3 ta element |
KeyError | lug‘atda bunday kalit yo‘q |
ZeroDivisionError | nolga bo‘lish |
RecursionError | rekursiya 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 = 0Musobaqada bu kamdan-kam kerak — u yerda kirish har doim to‘g‘ri
formatda beriladi.
Qanday tuzatish kerak
- Xato xabarini oxirigacha o‘qing.
- Ko‘rsatilgan qatorga qarang.
- Oraliq qiymatlarni chiqarib ko‘ring:
print(i, a[i]). - Kichik misolda sinab ko‘ring — 100 000 elementda emas, 3 tasida.
- Chegaraviy holatlarni alohida tekshiring.
Misol
a = [1, 2, 3]
try:
print(a[5])
except IndexError:
print('bunday indeks yo\'q')
Mashq masalalari
| ✓ | Kod | Masala | Qiyinlik |
|---|---|---|---|
| PY12-1 | Nolga bo‘lish | Boshlang‘ich | |
| PY12-10 | Bo‘sh ro‘yxat | Oson | |
| PY12-11 | Lug‘atda yo‘q kalit | Oson | |
| PY12-12 | Yaxlitlash tuzog‘i | O‘rta | |
| PY12-13 | Satr ko‘rinishidagi sonlarni saralash | O‘rta | |
| PY12-14 | Bitta nom — ikki sikl | O‘rta | |
| PY12-15 | Eng uzun Kollats zanjiri | Qiyin | |
| PY12-2 | Ro‘yxat chegarasi | Oson | |
| PY12-3 | Faqat sonlarni qo‘shish | Oson | |
| PY12-4 | Bitta kam | Boshlang‘ich | |
| PY12-5 | Vaqtga ulgurmaydi | O‘rta | |
| PY12-6 | Kasr emas, butun | Oson | |
| PY12-7 | Satr emas, son | Oson | |
| PY12-8 | Ro‘yxat nusxasi | Oson | |
| PY12-9 | 0.1 + 0.2 | Oson |