1-sahifa 2-sahifa


Download 363.98 Kb.
bet19/21
Sana06.06.2020
Hajmi363.98 Kb.
#115448
1   ...   13   14   15   16   17   18   19   20   21
Bog'liq
Python


228

23-bob. Istisnolar

def nsmallest (n, iterable, key = Yo'q):

# ....


# Agar n> = hajmi bo'lsa, tartiblangan () ni ishlatish uchun tezroq

urinib ko'ring:

hajmi = len (iterable)

tashqari (TypeError, AttributeError) e sifatida:

o'tish

yana:


agar n> = hajmi:

Qaytish tartiblangan (iterable, key = key) [: n]

# Kodning bir qismi o'tkazib yuborilgan .... Sekinroq yo'ldan foydalaning

23.6. Istisnolarni tashlab yuborish

Istisno holatlardan tashqari, Python ham qo'lga olish qobiliyatini beradi

kodga istisnolarni tashlang (masalan, ularni boshlang). Shuni unutmang

Zen Python sizning niyatlaringizni va kurashishingizni ifoda etishni tavsiya qiladi

biron bir narsani taklif qilish vasvasasi bilan. Agar funktsiya noto'g'ri berilgan bo'lsa,

kiriting va siz buni bajara olmasligingizni bilasiz, berishingiz mumkin

istisno. Istisnolar bu BaseException sinfining quyi sinflari ,

va ularni chiqarish uchun oshirish buyrug'idan foydalaning :

BaseException-ni ko'tarish ('dastur amalga oshmadi')

Odatda, dastur umumiy bo'lmagan sinf sinfini yaratadi

BaseException va uning subklasslaridan birining istisnosi tayyor

yoki ishlab chiqaruvchi tomonidan belgilanadi. Boshqa keng tarqalgan timsolda

Ko'tarish buyrug'i o'z-o'zidan ishlatiladi. Eslatib o'tamiz, jamoa ichida

tashqari faol deb ataladigan istisno mavjud. Unday bo `lsa



minimal oshirish buyrug'i bilan qilishingiz mumkin . Bu buyruq ruxsat beradi

istisnolarni ishlating va keyin yana asl istisnoni tashlang.

Kodni bajarishga urinayotganda

tashqari (TypeError, AttributeError) e sifatida:

log ('Istisno tugatish')

ko'tarish e

Siz asl istisnoni muvaffaqiyatli tashlashingiz mumkin, ammo iz

qoziq stack dastlabki istisno endi sodir bo'lganligini ko'rsatadi

birinchi ekranda emas, balki ko'tarish buyrug'i bilan satrda . U-



229-bet

23.7. Istisno qadoqlash

229

Ikki echim mavjud. Birinchisi, minimal buyruqdan foydalanish

oshirilishini . Ikkinchisi - bog'langan istisnolardan foydalanish (pastga qarang).

Keling, standart kutubxonaning configparser modulidan misolni ko'rib chiqaylik .

Ushbu modul INI fayllarini o'qish va yaratishni ta'minlaydi. Ini fayllar

odatda sozlash uchun ishlatiladi; Ular bo'lgan

JSON va YAML formatlarining paydo bo'lishiga qadar mashhur. .Diqqat qilish usuli

lug'atdan konfiguratsiyani o'qishga harakat qilmoqda. Agar misol

bittasini qo'shmoqchi bo'lganingizda "qattiq" rejimga o'tadi

bo'limlar bir necha marta tashlanadi. Agar "qiyin" bo'lsa

rejim yoqilmagan, usul takroriy kalitlarga ruxsat beradi; is-

oxirgi kalitdan foydalanadi. Variantni namoyish etadigan usulning bir qismi

minimal oshirish buyrug'i bilan :

def read_dict (o'z-o'zidan, lug'at, manba = ''):

elementlar_added = o'rnatish ()

bo'lim uchun, dictionary.items () tugmachalari:

bo'lim = str (bo'lim)

urinib ko'ring:

self.add_section (bo'lim)

tashqari (DuplicateSectionError, ValueError):

agar self._strict_ va element_added qismida bo'lim:

oshirish


elementlar_added.add (bo'lim)

Kodning bir qismi yo'q ....

Agar dublikat qattiq rejimda qo'shilsa, stack izi hali ham saqlanib qoladi

.add_section usulida xatolik yuz berdi, chunki u shu erda yuz berdi.



23.7. Istisno qadoqlash

Python 3 minimal buyruqqa o'xshash yangi funktsiyani taqdim etadi

doy oshirish ; u PEP 3134-da tasvirlangan - Istisno zanjir va ko'milgan

Tracebacks ". Ishlov berish kodidagi istisno bilan ishlaganda, bu mumkin

yana bir istisno tashla. Bunday vaziyatlarda bilish foydali bo'ladi

ikkala istisnolar haqida.

Quyida namunaviy kod keltirilgan. Divide_work funktsiyasi bo'lishi mumkin

0 ga bo'lish bilan bog'liq muammolar. Siz ushbu xatoni ko'rishingiz va ro'yxatdan o'tishingiz mumkin

uni jurnalga yopishtiring. Aytaylik, ro'yxatga olish funktsiyasi teskari bo'ladi -



230-bet

230

23-bob. Istisnolar

hozirda mavjud bo'lmagan bulut xizmatiga

Ushbu vaziyatni taqlid qilish uchun biz logni istisno qilamiz):

>>> def log (msg):

... SystemError-ni ko'taring ("Ro'yxatdan o'tmaslik")

>>> def divide_work (x, y):

... harakat qilib ko'ring:

...

x / y ga qaytish



ZeroDivisionError-dan tashqari:

...


log ("tizim ishlamayapti")

Agar siz divide_work- ni chaqirishda 5 va 0-dan o'tsangiz , Python ma'lumotlarni chop etadi

taxminan ikkita xato, ZeroDivisionError va SystemError . SystemError xatosi

oxirgi marta chiqadi, chunki bu oxirgi marta sodir bo'ldi:

>>> divide_work (5, 0)

Traceback (eng so'nggi qo'ng'iroq oxirgi):

Fayl "begpy.py", 3-qator, divide_work-da

x / y ga qaytish

ZeroDivisionError: nolga bo'lish

Yuqoridagi istisnolarni ko'rib chiqishda yana bir istisno ro'y berdi:

Traceback (eng so'nggi qo'ng'iroq oxirgi):

Fayl "begpy.py", 1-qator, da

divide_work (5, 0)

Fayl "begpy.py", 5-qator, divide_work-da

log ("tizim ishlamayapti")

"Begpy.py" fayli, 2-qator, jurnalga

SystemError-ni ko'tarish ("Ro'yxatdan o'tmaslik")

SystemError: Ro'yxatdan o'tilmadi

Aytaylik, bulutli log xizmati ishlamoqda ( jurnal funktsiyasi allaqachon mavjud)

xato bermaydi). Agar siz ZeroDivisionError turini o'zgartirishni xohlasangiz

yilda divide_work bir kuni ArithmeticError , tasvirlangan sintaksisi foydalanish

Buni amalga oshirish uchun ... sintaksisini ko'tarish ... dan foydalaning :

>>> def log (msg):

... bosib chiqarish (msg)

>>> def divide_work (x, y):

... harakat qilib ko'ring:

...

x / y ga qaytish





231-bet

23.7. Istisno qadoqlash

231

ZeroDivisionError-dan tashqari:

...

log ("tizim ishlamayapti")



...

ArithmeticError () ni ex-dan oshirish

Endi siz ikkita istisnoni ko'rasiz: asl ZeroDivisionError va

An ArithmeticError gap endi tomonidan yashirin ZeroDivisionError :

>>> divide_work (3, 0)

Traceback (eng so'nggi qo'ng'iroq oxirgi):

Fayl "begpy.py", 3-qator, divide_work-da

x / y ga qaytish

ZeroDivisionError: nolga bo'lish

Yuqoridagi istisnolarni ko'rib chiqish paytida yana bir narsa yuz berdi

istisno:

Traceback (eng so'nggi qo'ng'iroq oxirgi):

Fayl "begpy.py", 1-qator, da

divide_work (3, 0)

Fayl "begpy.py", 6-qator, divide_work-da

ArithmeticError () ni ex-dan oshirish

Arifmetikrror

Agar asl istisno ZeroDivisionError-ni bostirmoqchi bo'lsangiz , ishlatilgan

quyidagi koddan foydalaning (qarang "PEP 0409 - istisnolarni bostirish"

kontekst "):

>>> def divide_work (x, y):

... harakat qilib ko'ring:

...

x / y ga qaytish



ZeroDivisionError-dan tashqari:

...


log ("tizim ishlamayapti")

...


ArithmeticError () ni None dan ko'taring

Endi faqat tashqi ArithmeticError xatosi ko'rinadi :

>>> divide_work (3, 0)

Traceback (eng so'nggi qo'ng'iroq oxirgi):

Fayl "begpy.py", 1-qator, da

divide_work (3, 0)

Fayl "begpy.py", 6-qator, divide_work-da

ArithmeticError () ni None dan ko'taring

Arifmetikrror



232-sahifa

232

23-bob. Istisnolar



23.8. O'zingizni aniqlash

istisnolar

Istisnolar moduli ko'plab o'rnatilgan istisnolarni belgilaydi. Agar

sizning xatoingiz ba'zi mavjud istisnolarga yaxshi mos keladi.

niy, foydalaning. Quyida o'rnatilgan sinflarning ierarxiyasi keltirilgan.

istisnolar:

Asos


Systemexit

KlaviaturaInterrupt

GeneratorExit

Istisno


StopIteration

Arifmetikrror

FloatingPointError

OverflowError

ZeroDivisionError

Tasdiqlash xatosi

AttributeError

Bufererror

EnvironmentError

IOError


OSError

Eoferror


Importyor

Xato


Indexerror

Keyerror


Memoryerror

NameError

UnboundLocalError

ReferatError

Runtimeerrror

NotImplementedError

Sintakserrror

IndentationError

Taberror

Systemerrror

TypeError

ValueError

UnicodeError

UnicodeDecodeError





233-bet

23.9. Xulosa

233

UnicodeEncodeError

UnicodeTranslateError

Ogohlantirish

Eskirish Ogohlantirish

KutishDepratatsiya Ogohlantirish

O'tkazib yuborish

Sintaktik ogohlantirish

FoydalanuvchiWarning

Futurewarning

ImportWarning

UnicodeWarning

Baytiy ogohlantirish

O'zingizning istisnolaringizni aniqlash uchun sinfning kichik sinfini tanlang

Istisno yoki uning kichik sinflaridan biri. Gap shundaki, hamma boshqalar

BaseException kichik sinflari "istisnolar" shart emas.

Masalan, agar siz Klaviaturani kessangiz , muvaffaqiyatsiz bo'ladi

Ctrl + C tugallanadigan jarayonni tugatish . Agar siz ushlasangiz

GeneratorExit , generatorlar ishlashni to'xtatadi.

Bu erda ma'lumot etishmasligi uchun istisno qanday ko'rinishga ega

dasturda:

>>> sinf DataError (Istisno):

... def __init __ (o'zini, yo'qolgan):

...


self.missing = yo'qolgan

Nostandart istisnolardan foydalanish juda oddiy:

>>> agar konfiguratsiya qilinmagan bo'lsa 'muhim_data':

... DataError-ni oshiring ('muhim_data yo'q')



23.9. Xulosa

Ushbu bobda istisno bilan ishlash strategiyalari keltirilgan.

LBYL strategiyasida, operatsiyani amalga oshirishdan oldin, siz buni tasdiqlaysiz

hozirgi vaziyatda hech qanday xato bo'lmaydi. EAFP strategiyasida barcha kodlar mavjud

xato sinash / tutish blokida bo'lishi mumkin . Pitonda

dasturlashning ikkinchi uslubiga ustunlik beriladi.

Xatolarni aniqlashning turli mexanizmlari ham ko'rib chiqildi.

berish va qayta berish. Bo'lim oxirida bu qanday amalga oshirilganligi ko'rsatildi





234-bet

234

23-bob. Istisnolar

o'zingizning yaratish uchun subclass mavjud istisnolar

istisnolar.



10/23. Mashqlar

1. Oddiy kalor funktsiyalarini bajaradigan dastur yozing

sovutgich. Dastur ikkita raqamni oladi va keyin so'rov yuboradi

radiator. To'g'ri kiritilmagan ishlov berishni tekshiring

sonlarga rivojlanadi. Nol xatolar bilan ishlov berish.

2. Chiziqqa oldin raqamlashni kiritadigan dastur yozing.

mi fayl. Fayl nomi buyruq satridagi dasturga uzatiladi.

Sys modulini import qiling va sys ro'yxatidan fayl nomini o'qing .

argv . O'tkazib yuborish imkoniyatini to'g'ri hal qiling

fayl.




235-bet

24 Import

kutubxonalar

Oldingi boblarda asosiy til tuzilmalari ko'rib chiqilgan.

Python Ushbu bobda kodni import qilish haqida. Ko'p tillarda

kutubxonalar yoki kod bloklari tushunchasi mavjud

qayta ishlatmoq. Python katta tanlov bilan birga keladi

kutubxonalar, ammo, bu kutubxonalar foyda olish uchun, siz kerak

ulardan foydalana olish.

Kutubxonadan foydalanish uchun kodni kutubxonadan yuklab olishingiz kerak

ichiga ning ism sizning dasturi. Ismlar maydoni o'z ichiga oladi

dastur uchun mavjud bo'lgan funktsiyalar, sinflar va o'zgaruvchilar. Agar xoxlasangiz

Burchakning sinusini hisoblash uchun siz funktsiyani aniqlab olishingiz kerak

ushbu hisob-kitoblarni bajaradi yoki tayyor funktsiyani yuklaydi. O'rnatilgan

ennaya kutubxona matematikasida sin uchun sin funktsiyasi mavjud

radian bilan ifodalangan burchak. Kutubxonada shuningdek o'zgaruvchan,

"pi" ning aniqlash qiymati:

>>> matematikani sinishdan, pi

>>> gunoh (pi / 2)

1.0

Yuqoridagi parcha matematik modulni yuklaydi . Biroq, u bunday qilmadi



Matematikani sizning nomingiz ostiga itarib yuboradi. Buning o'rniga u o'zgaruvchini yaratadi,

bu matematik moduldan olingan gunoh funktsiyasiga ishora qiladi . U ham yaratadi

matematik moduldan pi o'zgaruvchisiga ishora qiluvchi o'zgaruvchi . Agar Siz



236-bet

236

24-bob. Kutubxonalarni import qilish

dir funktsiyasidan foydalanib, hozirgi nomlar maydonini tahlil qiling ,

Siz buni tasdiqlashingiz mumkin:

>>> "gunoh" dir ()

Rost


24.1. Import usullari

Oldingi misolda biz biblidan bitta funktsiyani import qildik

teki. Bundan tashqari, kutubxonani nomlar oralig'iga va

Barcha sinflarga, funktsiyalarga va parametrlarga ulaning. Import qilish uchun

matematik modul ismlar maydonida quyidagi buyruqni kiriting:

>>> import matematikasi

Ushbu misol matematik kutubxonani import qiladi . Bu yaratadi

modulga ishora qiluvchi yangi matematik o'zgaruvchilar . Ushbu modul o'z ichiga oladi

Dir funktsiyasi bilan namoyish qilinishi mumkin bo'lgan turli xil atributlar :

>>> dir (matematik)

['__doc__', '__file__', '__loader__', '__name__',

'__package__', '__spec__', 'acos', 'acosh', 'asin',

'asinh', 'atan', 'atan2', 'atanh', 'ship', 'copysign',

'cos', 'cosh', 'darajalar', 'e', ​​'erf', 'erfc', 'exp',

'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp',

'fsum', 'gamma', 'gcd', 'gipot', 'inf', 'isclose',

'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log',

'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow',

'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh, trunc']

Ushbu atributlarning ko'pi funktsiyalardir. Agar xoxlasangiz-

tan funktsiyasini chaqiring , bu muvaffaqiyat qozonmaydi, chunki tan nomi kiritilmagan

sizning ismingiz bo'sh joyiga faqat matematik . Ammo sarflashingiz mumkin

nuqta operatori ( . ) yordamida matematik o'zgaruvchini qidirish . Bu

operator ob'ektning xususiyatlarini tekshiradi. Pythonda hech narsa yo'q

ob'ektlardan tashqari, ushbu operatordan qidirish uchun foydalanishingiz mumkin

matematik ob'ektning tan atributi :

>>> matematikadan (0)

0,0




237-bet

24.1. Import usullari

237

Kutubxonalarni import qilish

import matematikasi

...


tan

gunoh


Id: 1aea

matematik

Id: 1ca8

__class __: funktsiyasi

__-sinf __: modul

Id: 1ca8


Kod

Kompyuter nima qiladi

O'zgaruvchilar

Ob'ektlar

__class __: funktsiyasi

Anjir. 24.1. Import moduli. E'tibor bering, ushbu kod yangi yaratadi

modulga ishora qiluvchi matematik o'zgaruvchi. Modul har xil

davr yordamida foydalana oladigan atributlar

Agar siz tan vazifasini bajarish uchun hujjatlarni o'qishni istasangiz , foydalaning

yordam funktsiyasidan foydalaning :

>>> yordam (matematik dastur)

Matematik modulda tanlangan funksiya uchun yordam:

tan (...)

tan (x)

Tangens x ni qaytaradi (radian shaklida).





238-bet

238

24-bob. Kutubxonalarni import qilish



MASLAHAT

Qachon yordamida funktsiyani import qilish bo'yicha qachon va

import buyrug'ini olish kerakmi? Agar bibliyadan atigi ikkita atributdan foydalansangiz

shishish, dan import uslubi mexanizmidan foydalaning . Qurilishda

dan vergul bilan ajratilgan bir nechta atributlarni sanab o'tish mumkin:

>>> matematikadan sin, cos, tan

>>> cos (0)

1.0


Ammo kutubxonaning ko'p qismiga kirish kerak bo'lsa, bu osonroq bo'ladi

import buyrug'i bilan kutubxonani import qiling . Bunday echim ham aytib beradi

sizning kodingizni o'qigan har bir kishiga (shu qatorda siz ham), u qaerdan yoki qayerdan kelgan

funktsiya (sinf, o'zgaruvchan).



ESLATMA

Agar siz kutubxonadan bir nechta atributlarni import qilishingiz kerak bo'lsa, buyruq

bir nechta satrlarni olishi mumkin. Agar siz importni davom ettirishga harakat qilsangiz

Keyingi satrda vazifani bajarishda xato yuzaga keladi:

>>> matematik import gunohidan,

... cos


Traceback (eng so'nggi qo'ng'iroq oxirgi):

Fayl "", 1-qator, da

SyntaxError: oxirida vergul qo'yib bo'lmaydi

atrofdagi qavslarsiz

Buyruq keyingi satrda davom etishini ko'rsatish uchun qo'ying

belgi \ :

>>> matematik import gunohidan, \

... cos


Boshqa variant ham mumkin - import qilingan nomlarni aylanada ro'yxatlash.

Qavslar. Qavsni ochish (kvadrat yoki jingalak)

buyruq quyidagi satrda davom etishini bildiradi.

>>> matematikadan (sin,

... cos)

Ikkinchi shakl Python uchun ko'proq idiomatik hisoblanadi.





239-bet

24.2. Import qilishda nomuvofiqliklar

239

24.2. Import qilishda nomuvofiqliklar

Agar siz trigonometrik dastur ustida ishlayotgan bo'lsangiz

operatsiyalarida siz allaqachon gunoh deb nomlangan funktsiyaga ega bo'lishingiz mumkin . Agar

Matematik kutubxonadan gunoh funktsiyasidan foydalanmoqchimisiz ? Bitta

mumkin bo'lgan echimlar - import matematikasi ; keyin math.sin kirish

kutubxona versiyasini anglatadi va gunoh sizning vazifangizdir.

Python yana bir variantni taqdim etadi. Siz qayta belgilashingiz mumkin

Hissa kalit yordamida nomini import bilan :

>>> matematik import gunohidan, boshqa_sinlar kabi

>>> boshqalar_sin (0)

0,0

Endi other_sin uchun bir bog'laning gunoh versiyasi bo'yicha matematika , va siz



foydalanish davom ettirishingiz mumkin gunoh zimmasiga muhtoj holda

kodi.


Deb kalit so'z bilan ham ishlaydi import buyruqlar . Agar sizda bo'lsa

nomi nomiga zid bo'lgan o'zgaruvchi (yoki funktsiya)

sizning nomingiz bo'shligidagi matematikada quyidagi parcha ko'rsatilgan

mumkin bo'lgan echimlardan biri:

>>> matematik boshqa_math kabi import qilish

>>> boshqa_math.sin (0)

0,0

MASLAHAT

Kalit so'z sifatida kodni yanada ixcham qilishga yordam beradi. Agar

sizning sevimli kutubxonangiz juda uzun nomlardan foydalanadi, siz

ularni sizning kodingizda osongina qisqartirishi mumkin. Numpy Library 1 foydalanuvchilari

ikkita harfning standart qisqartmasi sifatida qabul qilindi:

>>> np sifatida import

Shunga o'xshash standart Pandas 2 kutubxonasida qabul qilingan :

>>> pandalarni pd sifatida import qilish

1

numpy.org



2

pandas.pydata.org





240-bet

240

24-bob. Kutubxonalarni import qilish



24.3. Ommaviy import

Python shuningdek, nomlar maydonini chalkashtirishga imkon beradi

Tomonidan ommaviy import :

>>> matematikadan *

>>> asin (0)

0,0


Ushbu kod aniqlanmagan artsin funktsiyasini chaqiradi

kodda. Asin deb ataladigan satr birinchisini o'z ichiga oladi

koddagi asinni bilish . Nima sodir bo `LDI? Matematik buyruqdan foydalanganda

import * , bu buyruq Python-ga barcha tarkibni yuklashini aytadi

matematik kutubxonalar (sinf ta'riflari, funktsiyalar va o'zgaruvchilar) in

Mahalliy nomlar maydoni. Garchi bunday imkoniyat bir qarashda

Bu qulay ko'rinadi, aslida bu juda xavflidir.

Ommaviy import nosozliklarni tuzatishni murakkablashtiradi, chunki u yo'q

Bu yoki boshqa kod qaerdan kelganligi aniq ko'rsatib turibdi. Bundan ham ko'proq muammolar

ko'p kutubxonalardan ommaviy import qilingan niklar. Ko'proq

keyinchalik import buyruqlari shunga o'xshash narsalarni bekor qilishi mumkin

oldingi kutubxonada nima aniqlangan. Shu sabab bilan,

ommaviy import qilish tavsiya etilmaydi.

MASLAHAT

Ommaviy importdan foydalanmang!

Ushbu qoidadan mumkin bo'lgan istisnolar faqat qachon bajariladi

test kodini yozish yoki REPL bilan tajriba o'tkazish orqali.

Kutubxona mualliflari ushbu konstruktsiyadan hamma narsani import qilishda foydalanadilar

ular sinab ko'rmoqchi bo'lgan kutubxonaning tarkibi. Yo'q

ommaviy ko'rganingizdan shunchaki ko'rganingiz uchun foydalaning

birovning kodida.

Zen Pythonni eslab qoling:

"Aniqlik oshkor bo'lgandan yaxshiroqdir."





241-sahifa

24.5. Importni tashkil qilish

241

24.4. Ichki kutubxonalar

Ba'zi Python paketlarida ichki o'rnatilgan nomlar mavjud. Masalan

chora-tadbirlar, Python-ga kiritilgan XML kutubxonasi qo'llab-quvvatlashni o'z ichiga oladi

minidom va etree . Ikkala kutubxona ham ota-ona ichida joylashgan

xml to'plami :

>>> xml.dom.minidom importidan \

... parseString

>>> dom = parseString (

... ' ')

>>> xml.etree.ElementTree import-dan \

... XML

>>> elem = XML (' ')



Dan tuzilishga faqat kerakli funksiyalarni import qilish imkonini beradi.

va sinflar. Import konstruktsiyasi ( dan tashqari ) kod miqdorini oshiradi (lekin)

shuningdek paketning to'liq tarkibiga kirish huquqini ochadi):

>>> xml.dom.minidom-ni import qilish

>>> dom = xml.dom.minidom.parseString (

... ' ')

>>> xml.etree.ElementTree-ni import qilish

>>> elem = xml.etree.ElementTree.XML (

... ' ')


Download 363.98 Kb.

Do'stlaringiz bilan baham:
1   ...   13   14   15   16   17   18   19   20   21




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