Sobes.tech
Junior

Python'da istisno bilan ishlashning qanday xususiyatlari bor?

sobes.tech AI

AIdan javob

Python'da istisnolar, dasturning odatdagi bajarilish jarayonini to'xtatadigan voqealardir. Ular xatolarni ifodalaydigan obyektlardir.

Xususiyatlar:

  • Istisnolar hierarxiyasi: Barcha o'rnatilgan istisnolar sinflardir va BaseException asosiy sinfidan meros olish asosida tashkil etilgan.
    # Hierarxiya misoli
    # BaseException -> Exception -> StandardError -> ...
    #                  Exception -> ArithmeticError -> ZeroDivisionError
    
  • try...except... bloklari: Asosiy istisno bilan ishlash mexanizmi.
    try:
        # Istisno chiqarishi mumkin bo'lgan kod
        result = 10 / 0
    except ZeroDivisionError:
        # Maxsus istisnoni ishlash
        print("Nolga bo'lish!")
    except Exception as e:
        # Boshqa istisnolarni ishlash
        print(f"Xato yuz berdi: {e}")
    
  • Bir nechta except bloklari: Turli xil istisnolarni turlicha ishlash imkonini beradi.
    try:
        # Kod
        value = int("abc")
    except ValueError:
        print("Noto'g'ri raqam formati.")
    except TypeError:
        print("Noto'g'ri ma'lumot turi.")
    
  • else bloki: try bloki xatolik yuz bermasdan yakunlanganda ishlaydi.
    try:
        # Kod
        result = 10 / 2
    except ZeroDivisionError:
        print("Nolga bo'lish!")
    else:
        print("Operatsiya muvaffaqiyatli bajarildi.")
    
  • finally bloki: Har doim ishlaydi, xatolik yuz berish yoki bermasligidan qat'i nazar. Resurslarni bo'shatish uchun ishlatiladi.
    file = None
    try:
        file = open("myfile.txt", "r")
        # Fayldan o'qish
    except FileNotFoundError:
        print("Fayl topilmadi.")
    finally:
        if file:
            file.close() # Faylni garovli yopish
    
  • raise operatori: Aniq istisnoni chaqirish uchun ishlatiladi.
    def divide(a, b):
        if b == 0:
            raise ZeroDivisionError("Nolga bo'lish mumkin emas")
        return a / b
    
    try:
        divide(10, 0)
    except ZeroDivisionError as e:
        print(f"Xato: {e}")
    
  • Maxsus istisnalar: O'z sinflaringizni Exception yoki boshqa mavjud istisno sinfidan meros qilib yaratishingiz mumkin.
    class CustomError(Exception):
        pass
    
    def process_data(data):
        if not data:
            raise CustomError("Ma'lumotlar bo'sh")
    
    try:
        process_data([])
    except CustomError as e:
        print(f"Xato: {e}")
    
  • with kontekst menejeri yordamida istisnalarni ishlash: Resurslar bilan ishlashni soddalashtiradi, masalan, fayllar kabi, ularni yopishni talab qiladi.
    try:
        with open("myfile.txt", "r") as file:
            # Fayl bilan ishlash
            content = file.read()
    except FileNotFoundError:
        print("Fayl topilmadi.")
    # Fayl avtomatik ravishda `with` blokidan chiqishda yopiladi
    
  • Istisnalarni zanjirlash: Istisnani ishlash jarayonida, avvalgi istisno haqida ma'lumot saqlash mumkin (implicit yoki raise Exception from another_exception yordamida).

Ushbu xususiyatlar Python'da xatoliklarni boshqarish uchun moslashuvchan va kuchli mexanizm taqdim etadi, bu esa ishonchli va nosozliklarga chidamli dasturlar yaratishga imkon beradi.