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.
Pythonda, tayyor Exception klassidan meros olingan yangi klass yaratish orqali maxsus xatoliklarni aniqlashimiz mumkin.
Mana maxsus xatoliklarni aniqlash sintaksisi,
class CustomError(Exception):
...
pass
try:
...
except CustomError:
...
Bu yerda, CustomError — Exception klassidan meros oluvchi foydalanuvchi belgilagan xato.
Eslatma:
exceptions.py yoki errors.py sifatida aniqlaydi.Misol: Python foydalanuvchi belgilagan xatoligi
# 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,
Enter a number: 45
Eligible to Vote
Agar foydalanuvchi kiritmasi input_num 18 dan kichik bo'lsa,
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.
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,
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
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