«Н.Бекбосынов атындағы Маңғыстау энергетикалық колледжі» МКҚК
Тақырыбы 4 : Қателерді өңдеу және ерекшеліктер
Модуль/пән атауы:КМ 04: Бағдарламалық кодты қайта өңдеу
Педагог:Балықбаева С.Ж. дайындады.
Бағдарлама кезіндегі қателіктер сөзсіз. Сондықтан кез-келген бағдарламаның маңызды бөлігі оларды өңдеу болып табылады. Python-да барлық қателер жұмыс кезінде орын алады, сондықтан ол синтаксистік болмаса да, белгілі бір код жолында белгілі бір операциядан болады. Шикі ерекшелік мәтінінде қатені қайда іздеу керектігін білу үшін Файл атауы мен жол нөмірі көрсетіледі:
Traceback (most recent call last):
File "…\src\debug\tserver\_sandbox.py", line 5, in < module>
File "…\src\debug\tserver\_sandbox.py", line 4, in < fragment>
builtins.IOError: [Errno 2] No such file or directory: 'A.txt'
Хабарламаның соңғы жолы не болғанын көрсетеді. Ерекшеліктер әр түрлі, бұл түрі хабарламада көрсетіледі.
>>> 10 * (1/0)
Traceback (innermost last): File "< stdin>", line 1
ZeroDivisionError: integer division or modulo
>>> 4 + spam * 3
Traceback (innermost last): File "< stdin>", line 1 NameError: spam
>>> '2' + 2
Traceback (innermost last): File "< stdin>", line 1
TypeError: illegal argument type for built-in operation
Берілген мысалдағы ерекшелік түрлері: ZeroDivisionError, NameError және TypeError. Стандартты ерекшеліктер атаулары кірістірілген идентификаторлар болып табылады, бірақ сақталған кілт сөздер емес.
Түрден кейін бірден ерекшеліктің егжей-тегжейлері көрсетіледі. Қате туралы хабарламаның алдыңғы бөлігі стек мазмұны түрінде ерекше жағдайдың мәнмәтінін көрсетеді. Бұл жағдайда стандартты енгізуден оқылатын жолдарды қоспағанда, бастапқы мәтіннің жолдары көрсетіледі.
Ерекшеліктерді өңдеу
Сіз белгілі бір ерекшеліктерді өңдейтін бағдарламалар жаза аласыз. Келесі мысалды қараңыз, онда пайдаланушыға шақыру бүтін сан енгізілгенге дейін немесе орындалу тоқтатылғанға дейін беріледі (әдетте Ctrl-C). Екінші жағдайда, KeyboardInterrupt ерекшелік жасалады.
>>> while 1:
… try:
… x = int(input("Бүтін санды енгізіңіз: "))
… break
… except ValueError:
… print "Сіз қателескен. Тағы бір рет көріңіз…"
…
TRY нұсқаулары келесідей жұмыс істейді.
Алдымен TRY филиалы орындалады (TRY және except кілт сөздерінің арасында орналасқан нұсқаулар).
Егер ерекше жағдай болмаса, except тармағы өтіп кетеді және try нұсқаулығының орындалуы аяқталады.
Егер TRY тармағын орындау кезінде ерекшелік пайда болса, бұтақтың қалған бөлігі жіберіледі. Әрі қарай, егер ерекшелік түрі (класы) except кілт сөзінен кейін көрсетілгенге сәйкес келсе, except тармағы орындалады және try нұсқаулары орындалады.
Егер ерекшелік except кілт сөзінен кейін көрсетілгенге сәйкес келмесе, ол TRY сыртқы блогына жіберіледі немесе егер өңдеуші табылмаса, ерекшелік ұсталмаған болып саналады, орындау үзіліп, қате туралы хабарлама шығады.
Егер ерекшелік өңделмесе, ерекшелік мәні ерекшелік сыныбының атауынан кейін қате туралы хабарламада көрсетіледі.
Өңдеуші тікелей try блогында жасалған ерекшеліктерді ғана емес, сонымен қатар одан туындаған функцияларды да ұстайды.
Ерекшеліктер генерациясы
Raise нұсқаулығы бағдарламашыға ерекше жағдай жасауға мүмкіндік береді. Мысалы:
>>> raise NameError('HiThere')
Traceback (innermost last): File "", line 1
NameError: HiThere
&Nbsp; raise аргументі ретінде сынып данасы қолданылады. Класс ерекшелік түрін көрсетеді; конструкторға берілген дәлел, әдетте, ерекше жағдайдың пайда болуының "егжей-тегжейін" сипаттайды.
Қателерден "сақтандыру"
TRY нұсқаулығын жазудың тағы бір нұсқасы-кез-келген жағдайда орындалатын finally филиалының "сақтандыру" анықтамасы. Мысалы:
>>> try:
… raise KeyboardInterrupt()
… finally:
… print 'Қош бол!'
…
Қош бол!
Traceback (innermost last): File "", line 2
KeyboardInterrupt
Достарыңызбен бөлісу: |