Lush Green



Download 432,13 Kb.
Sana31.01.2021
Hajmi432,13 Kb.
#57985
Bog'liq
Exceptions(istisnolar)


Exceptions/Istisnolar

Exceptions/Istisnolar

Xatoliklar ikki xil bo’ladi: sintaktik va logik.

Sintaktik xatoda interpretator dasturni ishga tushirishga to’xtab qoladi, davom eta olmaydi, dasturda yozilgan jumlaga tushunmaydi.

Logik xatolarda kiritilgan ma’lumot natijasida yoki hisoblash natijasida yuzaga kelishi mumkin. Bunda ma’lumot qabul qilinish chegarasidan chiqib qolishi natijasida yuzaga keladi.

Logik xatolarda dasturning ishlashini ta’minlash maqsadida istisnolar kerak bo’ladi.

Exceptions/Istisnolar

Python da uchraydigan logik xatolar haqida:

Agar e’lon qilinmagan o’zgaruvchini ishlatsak:

>>>print(yangi_qiymat)

NameError: name 'yangi_qiymat' is not defined

Chunki yangi_qiymat degan o’zgaruvchini oldin e’lon qilib olishimiz kerak. Aks holda NameError tipidagi xatolik chiqadi

Exceptions/Istisnolar

Python da uchraydigan logik xatolar haqida:

Sonni nolga bo’lish amali yuz berganda:

>>> 1/0


Traceback (innermost last):

File "", line 1, in ?

ZeroDivisionError: integer division or modulo by zero

Bu holatda ZeroDivisionError tipidagi xatolik yuz beradi.

Exceptions/Istisnolar

Python da uchraydigan logik xatolar haqida:

Indekslar chegarasidan chiqib ketsak:

>>> aList = [ ]

>>> aList[0]

Traceback (innermost last):

File "", line 1, in ?

IndexError: list index out of range

aList listida nolinchi indeksdagi elementi yo’q. Shuning uchun IndexError turidagi xatolik chiqdi.

Exceptions/Istisnolar

Python da uchraydigan logik xatolar haqida:

Lug’at (dictionary) da mavjud bo’lmagan kalit (key) ga murojaat qilinganda:

>>> aDict = {'host': 'earth', 'port': 80}

>>> print aDict['server']

Traceback (innermost last):

File "", line 1, in ?

KeyError: server

Chunki aDict lug’atda ‘server’ degan kalit (key) yo’q.

Exceptions/Istisnolar

Python da uchraydigan logik xatolar haqida:

Mavjud bo’lmagan faylni ochmoqchi bo’lsak:

>>> f = open("qanaqadir_fayl")

Traceback (innermost last):

File "", line 1, in ?

IOError: [Errno 2] No such file or directory: 'qanaqadir_fayl’

Bunda IOError (Input Output Error – kirirtish chiqarish xatoligi) yuz berdi.

Exceptions/Istisnolar

Python da uchraydigan logik xatolar haqida:

>>> class myClass(object):

...


pass

...


>>> namuna = myClass()

>>> namuna.bar = 'spam'

>>> namuna.bar

'spam'


>>> namuna.foo

Traceback (innermost last):

File "", line 1, in ?

AttributeError: foo #Chunki namuna obyektida foo degan attribut yo’q.

Exceptions/Istisnolar

Try-except metodi

Bu usulda dastur kodiga biror istisnoni kiritish uchun ishlatiladi. Uning sintaksisini umumiy ko’rinishi quyidagicha:

try:


asosiy_dastur

except Exception:

istisno_qism

Exceptions/Istisnolar

Try-except metodi

Misol:


def float_misol(qiymat):

try:


return float(qiymat)

except ValueError:

pass

Bu funksiya argumentida kelgan qiymatni float tipiga o’zgartiradi. Agar argumentda son emas, string tipidagi yoki boshqa o’tkazib bo’lmaydigan tip kelsa, ya’ni ValueError tipidagi xatolik hosil bo’lishini mabodo oldindan bilsak, u holda pass operatori ishga tushadi – ya’ni hech narsa qilmaydi. Jim turadi.



Exceptions/Istisnolar

Try-except metodi

Yoqiradagi misol yana quyidagicha talqin qilish mumkin:

def safe_float(obj):

try:

qiymat = float(obj)



except ValueError:

qiymat = None

return qiymat

Exceptions/Istisnolar

Try-except metodi

Yoki bo’lmasa:

def safe_float(obj):

try:


qiymat = float(obj)

except ValueError:

qiymat = 'float tipiga almashtirish mumkin emas'

return qiymat

Shu oxirgi misolni keyingi slaydda ishlatib ko’ramiz:

Exceptions/Istisnolar

Try-except metodi

def safe_float(obj):

try:

qiymat = float(obj)



except ValueError:

qiymat = 'float tipiga almashtirish mumkin emas'

return qiymat

print(safe_float(“4”))

print(safe_float(4))

print(safe_float("qanaqadir_ifoda"))

4.0

4.0


float tipiga almashtirish mumkin emas

Exceptions/Istisnolar

Try-except metodi

Endi quyidagi dasturga qaraylik:

def safe_float(obj):

try:


qiymat = float(obj)

except ValueError:

qiymat = 'float tipiga almashtirish mumkin emas'

return qiymat

print(safe_float({"model":"nexia"}))

TypeError: float() argument must be a string or a number, not 'dict'

Bu holatda ishlamadi. Chunki argumentga dictionary tipidagi ifoda kelayapti. Bu esa ValueError ni emas TypeError ni beradi. Ya’ni argumentdagi qiymat emas, argumentdagi tip (yoki tur) xato berilayapti. Shuning uchun biz kutgan ‘float tipiga almashtirish mumkin emas’ jumla chiqmadi. Shu jumla chiqishi uchun dastur kodiga ValueError degan yozuvni o’rniga TypeError deb yozib qo’yishmiz kerak. Lekin bu holda esa faqat TypeError tipidagi xatolik uchun ishlaydigan bo’lib qoladi. Ham u uchun, ham bu uchun ishlaydigan bo’lishi uchun nima qilishimiz kerak?

Exceptions/Istisnolar

Try-except metodi

def safe_float(obj):

try:

qiymat = float(obj)



except ValueError:

qiymat = 'float tipiga almashtirish mumkin emas'

except TypeError:

qiymat = 'float tipiga almashtirish mumkin emas'

return qiymat

print(safe_float("4"))

print(safe_float(4))

print(safe_float("qanaqadir_ifoda"))

print(safe_float({"model":"nexia"}))

Javob:


4.0

4.0


float tipiga almashtirish mumkin emas

float tipiga almashtirish mumkin emas

Exceptions/Istisnolar

Try-except metodi

Yoki quyidagicha ham yozish mumkin:

def safe_float(obj):

try:

qiymat = float(obj)



except (ValueError, TypeError):

qiymat = 'float tipiga almashtirish mumkin emas'

return qiymat

print(safe_float("4"))

print(safe_float(4))

print(safe_float("qanaqadir_ifoda"))

print(safe_float({"model":"nexia"}))

Javob:


4.0

4.0


float tipiga almashtirish mumkin emas

float tipiga almashtirish mumkin emas

Exceptions/Istisnolar

Try-except-else metodi

Bu metodda avval try qismi bajariladi. Agar biror istisno hosil bo’lsa, except qismi bajarilib, dastur tugaydi. Agar istisno bo’lmasa, try qismidan keyingi qadamlar else qismida bajariladi. Misol uchun:

try:


a = input("Birinchi sonni kiriting: ")

b = input("Ikkinchi sonni kiriting: ")

result = int(a)/int(b)

except (ValueError, ZeroDivisionError):

print("Xatolik yuz berdi!")

else:


print("Bu sonlarning nisbatini kvadrati: ", result**2)

Birinchi sonni kiriting: 7

Ikkinchi sonni kiriting: 3

Bu sonlarning nisbatini kvadrati: 5.4444444444444455

Birinchi sonni kiriting: a

Ikkinchi sonni kiriting: 1

Xatolik yuz berdi!

Exceptions/Istisnolar

Try-(except-else)-finally metodi

Bu metodda avval try qismi bajariladi. Agar except yoki else qismlari bo’lsa, ular ham vaziyatga qarab bajariladi. Shundan so’ng hamma qism o’z ishini bajarib olganidan so’ng finally qismi o’z ishini bajaradi. Shuni aytish kerakki, except va else qismlar ishlatilmasligi ham mumkin. Misol uchun:

try:

a = input("Birinchi sonni kiriting: ")



b = input("Ikkinchi sonni kiriting: ")

result = int(a)/int(b)

except (ValueError, ZeroDivisionError):

print("Xatolik yuz berdi!")

else:

print("Bu sonlarning nisbatini kvadrati: ", result**2)



finally:

print("Dastur o'z ishini yakunladi.")

Birinchi sonni kiriting: 2

Ikkinchi sonni kiriting: 3

Bu sonlarning nisbatini kvadrati: 0.4444444444444444

Dastur o'z ishini yakunladi.

Birinchi sonni kiriting: a

Ikkinchi sonni kiriting: 1

Xatolik yuz berdi!

Dastur o'z ishini yakunladi.

Exceptions/Istisnolar

Try-(except-else)-finally metodi

Bu metodda avval try qismi bajariladi. Agar except yoki else qismlari bo’lsa, ular ham vaziyatga qarab bajariladi. Shundan so’ng hamma qism o’z ishini bajarib olganidan so’ng finally qismi o’z ishini bajaradi. Shuni aytish kerakki, except va else qismlar ishlatilmasligi ham mumkin. Misol uchun:

try:


a = input("Birinchi sonni kiriting: ")

b = input("Ikkinchi sonni kiriting: ")

result = int(a)/int(b)

except (ValueError, ZeroDivisionError):

print("Xatolik yuz berdi!")

else:


print("Bu sonlarning nisbatini kvadrati: ", result**2)

finally:


print("Dastur o'z ishini yakunladi.")

Birinchi sonni kiriting: 2

Ikkinchi sonni kiriting: 3

Bu sonlarning nisbatini kvadrati: 0.4444444444444444

Dastur o'z ishini yakunladi.

Birinchi sonni kiriting: a

Ikkinchi sonni kiriting: 1

Xatolik yuz berdi!

Dastur o'z ishini yakunladi.

Exceptions/Istisnolar

BaseException

Qisqacharoq variant ham bor. Misol uchun:

try:

a=input("enter: ")



b=1/int(a)

print(b)


except BaseException:

print("xato")

Bu holatda aniq qanaqa istisno bo’lishi aytilmagan. Shunday bo’lsada har qanday istisno holat uchun ishlayveradi.

Exceptions/Istisnolar

BaseException

Umuman Python dagi barcha turdagi istisnolarning har birini alohida bir sinflar deb qaraladi. Bir sinf boshqa bir sinf uchun voris bo’lishi mumkinligi bilgan holda, BaseException istisnosi barcha istisno sinflar uchun asosiy (baza, parent yoki eng dastlabki ota sinf) sinf deb qaraladi. Qolgan sinflar shu sinfning voris (child) sinfi bo’lib xizmat qiladi. BaseException sinfini uchta voris sinfi bor. Ular SystemExit, KeyboardInterrupt, Exception. SystemExit, KeyboardInterrupt sinflarning vorislar yo’q. Qolgan barcha istisnolar Exception istisno sinfini vorislari hisoblanadi. Shuning uchun Exception sinfidagi biror istisno bilan ishlamoqchi bo’lsak, yo o’sha istisnoni o’zini, yoki Exception ni o’zini ishlatsak ham bo’ladi. Lekin adabiyotlarda bunday qilish tavsiya qilinmaydi. Qaysi istisno bo’lsa, aynan o’sha bilan ishlagan ma’qul deyiladi. Istisnolar sinfini qo’yidagi jadvaldan ko’rishimiz mumkin:

Exceptions/Istisnolar

Istisno sinflar jadvali



Bundan tashqari yana 30 dan ortiq istisno holatlar mavjud. Topshiriq: internetdan qidirib, organib 15ta istisno holat uchun misol tuzilsin.

BaseException

Barcha istisno sinflar uchun asosiy sinf

SystemExit

Python interpretatori ish jarayonidan chiqib ketmoqchi bo’lsa

KeyboardInterrupt

Python dasturidan foydalanuvchi tomonidan chiqib ketishni talab qilganda

Exception

Regular istisnolar uchun asosiy sinf

StopIteration, GeneratorExit, SystemExit, StandardError, ArithmeticError, FloatingPointError, OverflowError, ZeroDivisionError

Download 432,13 Kb.

Do'stlaringiz bilan baham:




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