Dinamik tiplashtirilgan


Yangi istisnolarni ishlab chiqish



Download 2,16 Mb.
bet30/56
Sana09.03.2022
Hajmi2,16 Mb.
#487710
1   ...   26   27   28   29   30   31   32   33   ...   56
Bog'liq
Ataxonov maruza

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,16 Mb.

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




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