Dinamik tiplashtirilgan


Yangi istisnolarni ishlab chiqish



Download 2,94 Mb.
bet30/77
Sana06.10.2022
Hajmi2,94 Mb.
#851613
1   ...   26   27   28   29   30   31   32   33   ...   77
Bog'liq
Dinamik

Yangi istisnolarni ishlab chiqish
Yuqoridagi jadvalida koʻrsatilgan barcha istisnolar klasslar shaklida aniqlangan. Shuningdek, Python tilida ehtiyojga koʻra yangi istisnolarni yaratish mexanizmi ham koʻzda tutilgan.
Yangi istisnolarni ishlan chiqish uchun Exception klassining vorisi boʻlgan yangi klassni e’lon qilish lozim. Bu jarayonni quyidagicha ifogalash mumkin:
class NetworkError(Exception):
pass
Yangi istisno qilinadigan vaziyatdan amalda foydalanish uchun uni raise operatoriga uzatish kerak. Masalan:
raise NetworkError(“Kompyuterni tarmoqda topib boʻlmadi.”)
Istisno qilinadigan vaziyatlar raise yordamida qoʻzgʻotilganda klass nazoratchisiga (instruktoriga) qoʻshimcha qiymat uzatilishi mumkin. Odatda bu yuzaga keladigan hatolik haqidagi ma’lumot-matndan iborat boʻladi. Shunday boʻlsada, yangi istisnolar quyidagi namuna kabi bir yoki bir nechta qiymatlarni qabul qilishi mumkin:
class DeviceError(Exception):
def __init(self, yerrno, msg):
self.args = (errno, msg)
self.d yerrno = yerrno
self.errmsg = msg
# istisnoli vaziyatni (bir nechta parametrni uzatib) qoʻzgʻotish
raise DeviceError(1, “Javob yoʻq”)
_init() metodini qayta aniqlash orqali yangi istisnoni yaratishda metodning argumentlarini oʻz ichiga oluvchi kortejni self.args attributiga oʻzlashtirib qoʻyishni unutmaslik lozim. Bu attribut hatolikka mos axborotni ekranga uzatishda foydalaniladi. Agar attribut boʻsh qoldirilsa ekranga hech narda chiqarilmaydi va yuzaga keladigan hatolik haqidagi ma’lumotni foydalanuvchilar koʻra olmaydilar.
Istisnolarni vorislik mexanizmi asosida shajarasimon tashkil qilish mumkin. Masalan, yuqorida aniqlangan NetworkError oʻziga hos boshqa istisnolar uchun bazaviy klass boʻlib xizmat qilishi mumkin:
class HostnameError(NetworkError): pass
class TimeoutError(NetworkError): pass
def yerror1():
raise HostnameError(“Xost topilmadi”)
def yerror2():
raise TimeoutError(“kutish vaqti ortib ketdi”)
try:
error1()
except NetworkError as e:
if type(e) is HostnameError:
# Shu tipdagi hatolikka mos amallarbni bajarish
...
Bu holda NetworkError klassining vorisi boʻlgan except NetworkError buyrugʻi barcha istisno qilinadigan vaziyatlarni tutib qoladi. Yuzaga kelgan hatolik tipini aniqlash uchun type(), sodir boʻlgan oxirgi istisnoli vaziyat haqidagi axborotni olish uchun esa sys.exc_info() funksiyalaridan foydalanish mumkin.

Download 2,94 Mb.

Do'stlaringiz bilan baham:
1   ...   26   27   28   29   30   31   32   33   ...   77




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish