Xatolarni to'g'ri ushlash โ€” ishonchli dastur yozishning asosi.

Asosiy sintaksis

try:
    son = int(input("Son kiriting: "))
    natija = 10 / son
    print(f"Natija: {natija}")
except ValueError:
    print("Xato: Raqam kiritilmadi!")
except ZeroDivisionError:
    print("Xato: Nolga bo'lish mumkin emas!")
except Exception as e:
    print(f"Kutilmagan xato: {e}")
else:
    print("Xato bo'lmadi!")
finally:
    print("Har doim ishlaydi")

Ko'p xato ushlash

try:
    fayl = open("mavjud_emas.txt")
    ma'lumot = fayl.read()
except (FileNotFoundError, PermissionError) as e:
    print(f"Fayl xatosi: {e}")

O'z xatoni yaratish

class YoshXatosi(Exception):
    def __init__(self, yosh):
        self.yosh = yosh
        super().__init__(f"Yosh {yosh} bo'lmasligi kerak emas!")

def tekshir_yosh(yosh):
    if yosh < 0 or yosh > 150:
        raise YoshXatosi(yosh)
    return f"Yosh to'g'ri: {yosh}"

try:
    print(tekshir_yosh(-5))
except YoshXatosi as e:
    print(f"Xato: {e}")

Context manager (with)

# Fayl avtomatik yopiladi, hatto xato bo'lsa ham
with open("fayl.txt", "w") as f:
    f.write("Xavfsiz yozish")

# O'z context manager
class VaqtOlchi:
    def __enter__(self):
        import time
        self.boshlanish = time.time()
        return self

    def __exit__(self, *args):
        import time
        print(f"Vaqt: {time.time() - self.boshlanish:.3f}s")

with VaqtOlchi():
    sum(range(1000000))

Logging

import logging

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(levelname)s - %(message)s')

logging.debug("Debug xabari")
logging.info("Ma'lumot")
logging.warning("Ogohlantirish")
logging.error("Xato!")
logging.critical("Kritik xato!")