Python-da Eng Ko'p Qilinadigan 7 Ta Xato va Ularning Yechimi
Muallif: Javohir Abdullayev · · Python

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_list2. 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 yopiladi3. '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 mumkinTo'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