32 / 59

Python Custom Exceptions

Maxsus xatoliklar bilan tanishish

Oldingi darsda biz Pythondagi turli tayyor xatoliklar va xatoliklarni boshqarish nima uchun muhimligi haqida bilib oldik.

Biroq, ba'zida bizga o'z maqsadimizga xizmat qiluvchi o'zimizning maxsus xatoliklarimizni yaratish kerak bo'lishi mumkin.

Maxsus xatoliklarni aniqlash

Pythonda, tayyor Exception klassidan meros olingan yangi klass yaratish orqali maxsus xatoliklarni aniqlashimiz mumkin.

Mana maxsus xatoliklarni aniqlash sintaksisi,

example.py
class CustomError(Exception):
    ...
    pass

try:
   ...

except CustomError:
    ...

Bu yerda, CustomError — Exception klassidan meros oluvchi foydalanuvchi belgilagan xato.

Eslatma:

  • Katta Python dasturini ishlab chiqayotganimizda, dasturimiz tashlaydigan barcha foydalanuvchi belgilagan xatoliklarni alohida faylga joylashtirish yaxshi amaliyot hisoblanadi.
  • Ko'plab standart modullar o'z xatoliklarini alohida (odatda, lekin har doim emas) exceptions.py yoki errors.py sifatida aniqlaydi.

Misol: Python foydalanuvchi belgilagan xatoligi

example.py
# Python foydalanuvchi belgilagan xatoliklarini aniqlash
class InvalidAgeException(Exception):
    "Kiritilgan qiymat 18 dan kichik bo'lsa tashlanadi"
    pass

# bu sonni topishingiz kerak
number = 18

try:
    input_num = int(input("Enter a number: "))
    if input_num < number:
        raise InvalidAgeException
    else:
        print("Eligible to Vote")
        
except InvalidAgeException:
    print("Exception occurred: Invalid Age")

Natija

Agar foydalanuvchi kiritmasi input_num 18 dan katta bo'lsa,

kod
Enter a number: 45
Eligible to Vote

Agar foydalanuvchi kiritmasi input_num 18 dan kichik bo'lsa,

kod
Enter a number: 14
Exception occurred: Invalid Age

Yuqoridagi misolda, biz tayyor Exception klassidan meros oluvchi yangi klass yaratish orqali InvalidAgeException maxsus xatoligini aniqladik.

Bu yerda, input_num 18 dan kichik bo'lganda, bu kod xatolikni keltirib chiqaradi.

Xatolik yuz berganda, try bloki ichidagi qolgan kod o'tkazib yuboriladi.

except bloki foydalanuvchi belgilagan InvalidAgeException xatoligini ushlaydi va except bloki ichidagi operatorlar bajariladi.

Xatolik klasslarini moslashtirish

Bu klassni ehtiyojimizga qarab boshqa argumentlarni qabul qilish uchun yanada moslashtirishimiz mumkin.

Exception klasslarini moslashtirishni o'rganish uchun, sizga ob'ektga yo'naltirilgan dasturlash (Object-Oriented Programming) haqida asosiy bilim kerak bo'ladi.

Pythonda ob'ektga yo'naltirilgan dasturlash haqida bilish uchun, Python Object Oriented Programming sahifasiga tashrif buyuring.

Keling, bir misolni ko'ramiz,

example.py
class SalaryNotInRangeError(Exception):
    """Kiritilgan ish haqidagi xatoliklar uchun tashlanadi.

    Atributlar:
        salary -- xatolikka sabab bo'lgan kiritilgan ish haqi
        message -- xatolik tushuntirishi
    """

    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)

salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

Natija

kod
Enter salary amount: 2000
Traceback (most recent call last):
  File "<string>", line 17, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range

Bu yerda, biz o'zimizning maxsus salary va message argumentlarini qabul qilish uchun Exception klassining konstruktorini qayta belgiladik (override).

Keyin, ota Exception klassining konstruktori self.message argumenti bilan super() yordamida qo'lda chaqiriladi.

Keyinroq foydalanish uchun maxsus self.salary atributi aniqlanadi.

So'ngra, SalaryNotInRangeError tashlanganda mos xabarni ko'rsatish uchun Exception klassining meros olingan __str__ metodidan foydalaniladi.

Ko'proq o'qing: Python Exception Handling

QBilimingizni sinab ko'ring
1 / 3

1. Pythonda maxsus (custom) xatolik yaratish uchun klass qaysi tayyor klassdan meros olishi kerak?