Python dasturlash tili: 11-dars
Istisnolar (Exceptions)
Ba’zan dastur ishlashi davomida istisno holatlar yuzaga kelishi mumkin. Misol uchun, mavjud bo’lmagan faylni o’qishga bo’lgan harakat yoki dasturdagi no’malum buyruqlar. Bunday holatlar exception’lar yordamida hal qilinadi.
Xatoliklar
Agar biz
print funksiyasini Print shaklida chaqiradigan bo’lsak, python interpretatori bizga sintaksis xatolikni ko’rsatadi.
>>> Print(«Salom dunyo»)
Traceback (most recent call last):
File «
NameError: name ‘Print’ is not defined
>>> print(«Salom dunyo»)
Salom dunyo
E’tibor bergan bo’lsangiz,
NameError xatoligi chiqarildi hamda qayerda shu xatolik qayd qilingani ham ko’rsatildi. Bu holda xatoliklarni qayta ishlovchisi harakatga tushadi.
Exception’lar
Foydalanuvchidan nimadir kiritishini so’raymiz, so’ngra
Ctrl + d tugmalarini bosamiz va nima bo’lishini kuzatamiz.
>>> s = input(«Nimadir kiriting –> «)
Nimadir kiriting –> Traceback (most recent call last):
File «
EOFError
Python
EOFError nomli xatolikni chiqardi. Bu xatolik kutilmagan joyda (Ctrl + dtugmalari yordamida kiritiladigan) fayl oxiri (end of file) belgisi qayd qilinganini bildiradi.
Exception – istisnolarni qayta ishlash
Exception’larni
try . . except operatori yordamida qayta ishlash mumkin. Bunda hamma odatiy buyruqlar try blokiga joylashtiriladi, istisnolarni qayta ishlovchilari esa except blokiga joylashtiriladi.
Misol: (try_except.py nomi bilan saqlang.)
try: text = input('Nimadir kiriting --> ') except EOFError: print('Nega EOF qildigiz?') except KeyboardInterrupt: print('Siz amallarni bekor qildingiz.') else: print('Siz {0} kiritdingiz.'.format(text))
Natija:
$ python try_except.py
Nimadir kiriting → # Ctrl + d ni bosing
Nega EOF qildingiz?
$ python try_except.py
Nimadir kiriting → # Ctrl + c ni bosing
Siz amallarni bekor qildingiz.
$ python try_except.py
Nimadir kiriting → xatosiz
Siz xatosiz kiritdingiz.
Bu qanday ishlaydi:
Bu yerda biz istisno/xatolik chaqirishi mumkin bo’lgan barcha buyruqlarni
trybloki ichiga joylashtirdik. So’ng except bloki ichiga tegishli istisno/xatolikka mos keluvchi qayta ishlovchilarni joylashtirdik. except ifodasi bitta istisno/xatolikni yoki qavs ichida ko’rsatilgan bir nechta istisno/xatoliklarni qayta ishlashi mumkin. Agar xatolik yoki istisno nomi ko’rsatilmagan bo’lsa, u holda barcha xatolik va istisnolar qayta ishlanadi.
Yodingizda saqlang,
try ifodasi uchun hech bo’lmaganda bitta except ifodasi bo’lishi kerak. Aks holda try ishlatishning hech qanday ma’nosi qolmaydi.
Agar xatolik yoki istisno biror
except blokida ushlab qolinmasa, u holda pythonning istisnolarni qayta ishlovchisi chaqiriladi va oynaga xatolik haqidagi xabarni chop etadi. Yuqorida bunga misol ko’rdik.
try . . except blokiga else blokini ham qo’shish mumkin. Bu blok hech qanday istisno yuz bermaganda ishga tushadi.
Exception – istino chaqirish
Istisnolarni
raise operatori yordamida tegishli xatolik/istisno nomini bergan holda chaqirish mumkin.
Misol: (raising.py nomi bilan saqlang)
class ShortInputException(Exception): '''Foydalanuvchi klass exceptioni.''' def __init__(self, length, atleast): Exception.__init__(self) self.length = length self.atleast = atleast try: text = input("Nimadir kiriting --> ") if len(text)Natija:
$ python raising.py
Nimadir kiriting –> a
ShortInputException: Kiritilgan satr uzunligi — 1; minimum 3 uzunlik kutilgan edi
Bu qanday ishlaydi:
Bu yerda biz ShortInputException nomli o'zimizning exception turimizni xosil qildik. U ikkita xususiyatdan (maydon) tashkil topgan: length — kiritilgan satr uzunligini saqlash uchun, atleast — dastur kutgan minimal satr uzunligi.
except blokida biz ShortInputException klasini ko'rsatamiz u o'z navbatidaex o'zgaruvchisiga saqlanadi. ex o'zgaruvchisi esa tegishlik xatolik/exception ob'yektidan tashkil topgan. except bloki ichida length va atleastxususiyatlarini ishlatib foydalanuvchiga tegishli xabarni ko'rsatamiz.
try . . finally
Tasavvur qilaylik, dasturda fayldan o'qib olish amali bor va dastur oxirida shu fayl to'g'ri yopilishi kerak. Bunga finally blokini qo'llash bilan erishish mumkin.
Misol: (finally.py nomi bilan saqlang)
import time try: f = open('poem.txt') while True: # Odatiy fayldan o'qish usuli line = f.readline() if len(line) == 0: break print(line, end='') time.sleep(2) # Bir qancha vaqt kutish except KeyboardInterrupt: print("!! Siz fayldan o'qishni bekor qildingiz.") finally: f.close() print('(Tozalash: Faylni yopish)')Natija:
$ python finally.py
Dasturlash qiziqarli.
Agar ish zerikarli bo'lsa,
Unga quvnoq tus berish uchun –
^C!! Siz fayldan o'qishni bekor qildingiz.
(Tozalash: Faylni yopish)
Bu qanday ishlaydi:
Bu yerda biz oddiy fayldan o'qib olish amallarini bajaryapmiz. Dastur sekin ishlashi uchun har bir chop qilingan satrdan so'ng dastur 2 sekund uyquga ketadi (python judayam tez ishlaydi). Dasturni to'xtatish yoki bekor qilish uchun dastur bajarilishi jarayonida
Ctrl + c bosing.Kuzatgan bo'lsangiz
KeyboardInterrupt istisnosi yuz berdi va dastur bajarilishdan to'xtadi. Ammo dastur bajarilishdan to'xtashidan oldin finally bloki bajarildi va o'qish uchun ochilgan fayl yopildi.with operatori
Biror bir resursga
try blokida murojaat qilib, so'ngra bu resursni finally blokida bo'shatib yuborish odatiy yo'l sifatida ko'riladi. Lekin bu amalni nisbatan qulayroq bajarish uchun with operatoridan foydalanish mumkin.Misol: (using_with.py nomi bilan saqlang)
with open("poem.txt") as f: for line in f: print(line, end='')Natija:
$ python using_with.py
Dasturlash qiziqarli.
Agar ish zerikarli bo'lsa,
Unga quvnoq tus berish uchun –
Pythonni ishlating!
Bu qanday ishlaydi:
Natija bundan oldingi misoldagi kabi bo'lishi kerak. Farqi shundaki, biz bu yerda
open funksiyasini with operatori bilan ishlatyapmiz va shu bilan faylni avtomat yopishni with operatori zimmasiga yuklayapmiz.poem.txt fayli teksti.
Dasturlash qiziqarli.
Agar ish zerikarli bo'lsa,
Unga quvnoq tus berish uchun –
Pythonni ishlating!
Manba:
Umumiy Dasturlash
Python dasturlash tili: 11-dars