Python-da Eng Ko'p Qilinadigan 7 Ta Xato va Ularning Yechimi

Muallif: Javohir Abdullayev · · Python

Python-da Eng Ko'p Qilinadigan 7 Ta Xato va Ularning Yechimi

Python dasturlashida keng tarqalgan xatolar

Python o'rganish oson va sintaksisi sodda bo'lgan dasturlash tili hisoblanadi. Ammo uning soddaligi ba'zida dasturchilarni chalg'itib, yashirin xatolarga (bug) sabab bo'lishi mumkin. Katta loyihalarda yoki production muhitida bunday xatolar tizim sekinlashishiga, xotira to'lib qolishiga yoki kutilmagan natijalarga olib keladi. Ushbu maqolada Python dasturchilari eng ko'p yo'l qo'yadigan 7 ta xatoni va ularni to'g'rilash usullarini ko'rib chiqamiz.

1. O'zgaruvchan (Mutable) Standart Argumentlardan Foydalanish

Funksiya parametriga standart qiymat sifatida bo'sh ro'yxat ([]) yoki lug'at ({}) berish eng mashhur xatolardan biridir. Python funksiyaning standart argumentlarini faqat bir marta — funksiya e'lon qilinayotganda hisoblaydi.

Xato holat:

def add_item(item, items_list=[]):
    items_list.append(item)
    return items_list

print(add_item("olma"))  # ["olma"]
print(add_item("nok"))   # ["olma", "nok"] (kutilmagan natija!)

To'g'ri yechim:

def add_item(item, items_list=None):
    if items_list is None:
        items_list = []
    items_list.append(item)
    return items_list

2. Fayllarni Yopishni Unutish va Context Manager Ishlatmaslik

Fayllarni open() orqali ochib, so'ngra close() qilish esdan chiqsa, operatsion tizimda resurslar band bo'lib qoladi yoki xatolik yuz berganda fayl butunlay yopilmaydi.

To'g'ri yechim: Har doim with operatoridan foydalaning:

with open("data.txt", "r", encoding="utf-8") as file:
    content = file.read()
# Fayl avtomatik tarzda yopiladi

3. 'is' va '==' Operatorlarini Adashtirish

== operatori ikki ob'ektning qiymati tengligini tekshiradi, is operatori esa ularning xotiradagi manzili (identity) bir xil ekanligini solishtiradi. Kichik sonlar keshlanishi sababli ba'zida is to'g'ri ishlagandek tuyulishi mumkin, ammo bu xavfli amaliyotdir.

Xato holat:

a = 1000
b = 1000
print(a is b)  # False (ba'zi muhitlarda)

Qoida: None, True, False kabi singleton qiymatlarni tekshirishda is, oddiy qiymatlarni solishtirishda esa == ishlating.

4. Sikl Davomida Ro'yxatdan Element O'chirish

Ro'yxat (list) bo'yicha for sikli aylanayotgan paytda uning elementlarini o'chirish indekslarning siljishiga va ba'zi elementlarning o'tkazib yuborilishiga olib keladi.

Xato holat:

numbers = [1, 2, 3, 4, 5, 6]
for n in numbers:
    if n % 2 == 0:
        numbers.remove(n)
print(numbers)  # [1, 3, 5] o'rniga noto'g'ri natijalar berishi mumkin

To'g'ri yechim: Ro'yxat generatsiyasi (list comprehension) yoki nusxa orqali filtrlash kerak:

numbers = [n for n in numbers if n % 2 != 0]

5. Istisnolarni Haddan Tashqari Keng Tutish (Bare Except)

Barcha xatolarni shunchaki except: pass yoki except Exception: qilib yashirish dasturdagi jiddiy muammolarni topishni murakkablashtiradi.

To'g'ri yechim: Faqat siz kutayotgan aniq xatolarni tuting (masalan, KeyError, ValueError) va xatolikni log qiling:

try:
    value = int(user_input)
except ValueError:
    print("Iltimos, faqat butun son kiriting!")

6. Global O'zgaruvchilarga Haddan Tashqari Tayanish

Funksiyalar ichida global kalit so'zini tez-tez ishlatish kodning o'qilishini qiyinlashtiradi va qayerda qaysi qiymat o'zgarganini kuzatishni imkonsiz qiladi. Qiymatlarni funksiyaga argument orqali uzatish va return orqali qaytarish toza kod yozishning oltin qoidasidir.

7. Tip Aniqligini (Type Annotations) Ishlatmaslik

Katta loyihalarda funksiyaga qanday tipdagi ma'lumot kelishi va nima qaytishini ko'rsatmaslik xatolarga zamin yaratadi. Python 3.5+ versiyalaridan boshlab type hinting qo'llab-quvvatlanadi:

def calculate_discount(price: float, discount: float) -> float:
    return price * (1 - discount)

Xulosa

Python o'zining moslashuvchanligi bilan mashhur, ammo toza va samarali kod yozish uchun uning ichki ishlash mexanizmlarini tushunish muhimdir. Yuqoridagi xatolardan qochish orqali loyihangiz sifatini va barqarorligini sezilarli darajada oshirishingiz mumkin.

Teglar: #Python #Dasturlash #Toza Kod #Python Tips