Шта је изузетак у Питхону?
Изузетак је грешка која се дешава у време извршавања програма. Међутим, док покреће програм, Питхон генерише изузетак којим треба поступати како би се избегао пад вашег програма. На језику Питхон, изузеци се аутоматски покрећу на грешкама или их ваш код може покренути и пресрести.
Изузетак указује на то да се, иако се догађај може догодити, ова врста догађаја догађа ретко. Када метода није у стању да обради изузетак, пребацује се на функцију позиваоца. На крају, када се изузетак избаци из главне функције, програм се нагло прекида.
У овом упутству за изузетно руковање Питхоном научићете:
- Шта је изузетак у Питхону?
- Уобичајени примери изузетака
- Зашто бисте користили изузетке?
- Правила изузетака
- Изузетан механизам руковања
- Изјава о покушају
- Изјава о улову
- Изјава о подизању
- Важне Питхон грешке
- Остали важни Питхон изузеци
- Грешка у односу на изузетке
Уобичајени примери изузетака:
- Подела по нули
- Приступ датотеци која не постоји.
- Додавање два некомпатибилна типа
- Покушај приступа непостојећем индексу низа
- Уклањање табеле са неповезаног сервера базе података.
- Подизање на банкомату више од расположивог износа
Зашто бисте користили изузетке?
Ево разлога за коришћење изузетака у Питхону:
- Руковање изузецима омогућава вам да раздвојите код за руковање грешкама од уобичајеног кода.
- Изузетак је Питхон објекат који представља грешку.
- Као и код коментара на код, изузеци вам помажу да се подсетите шта програм очекује.
- Појашњава код и побољшава читљивост.
- Омогућава вам да подстакнете последице јер се решавање грешака одвија на једном месту и на један начин.
- Изузетак је погодан метод за руковање порукама о грешкама.
- У Питхону можете да изузмете изузетак у програму користећи методу изузећа за повишење.
- Подизање изузетка вам помаже да прекинете извршавање тренутног кода и вратите изузетак натраг у очекивање док се не обради.
- Обрада изузетака за компоненте које се не могу директно носити са њима.
Правила изузетака
Ево неколико основних правила Питхон руковања изузецима:
- Изузеци морају бити објекти класе
- За изузетке класе, можете користити изјаву три са клаузулом осим која помиње одређену класу.
- Чак и ако су изјава или израз синтаксички тачни, може се приказати грешка када се покуша извршити.
- Грешке пронађене током извршавања називају се изузецима и нису безусловно фаталне.
Изузетан механизам руковања
Руковањем изузецима управља следећих 5 кључних речи:
- покушати
- улов
- коначно
- бацити
Изјава о покушају
Изјава три укључује кључну реч три, праћена двотачком (:) и пакетом кода у којем се могу појавити изузеци. Има једну или више клаузула.
Током извршавања исказа три, ако тада није дошло до изузетака, тумач занемарује обрађиваче изузетака за тај одређени покушај израза.
У случају да се деси било који изузетак у пакету за испробавање, пакет за испробавање истиче и контрола програма се пребацује на подударање, осим на руковаоца који следи пакет за покушаје.
Syntax:try:statement(s)
Изјава о улову
Блокови хватања узимају по један аргумент, што је врста изузетка коју ће вероватно ухватити. Ови аргументи могу се кретати од одређене врсте изузетака који могу варирати до свеобухватне категорије изузетака.
Правила за блок улова:
- Блок цатцх можете дефинисати помоћу кључне речи цатцх
- Параметар Цатцх Екцептион увек је приложен у заградама
- Увек представља врсту изузетка који хвата ручке блокова.
- Код за руковање изузецима записан је између две {} коврџаве заграде.
- У један блок покушаја можете поставити више блокова улова.
- Блок цатцх можете користити тек након блока три.
- Сав блок цатцх би требало да се нареди од изузетка подкласе до суперкласе.
Пример:
try}catch (ArrayIndexOutOfBoundsException e) {System.err.printin("Caught first " + e.getMessage()); } catch (IOException e) {System.err.printin("Caught second " + e.getMessage());}
Напокон Блок
Коначно, блок се увек извршава без обзира на изузетак или не. Завршна кључна реч вам омогућава да креирате блок кода који следи блок три-цатцх.
Коначно, клаузула није обавезна. Намењен је дефинисању акција чишћења које би требало извршити у свим условима.
try:raise KeyboardInterruptfinally:print 'welcome, world!'OutputWelcome, world!KeyboardInterrupt
Коначно, клаузула се извршава пре исказа три.
Изјава о подизању
Израз рисе наводи аргумент који иницијализује објекат изузетка. Овде зарез иде иза имена изузетка, а аргумент или скуп аргумената који следи зарез.
Синтакса:
raise [Exception [, args [, traceback]]]
У овој синтакси, аргумент није обавезан, а у време извршавања вредност аргумента изузетак увек није.
Пример:
Питхон изузетак може бити било која вредност попут низа, класе, броја или објекта. Већина ових изузетака које покреће Питхон цоре су класе са аргументом који је инстанца класе.
Важне Питхон грешке
Тип грешке | Опис |
АритхметицЕррор | АритхметицЕррор делује као основна класа за све аритметичке изузетке. Повисује се за грешке у рачунским операцијама. |
ИмпортЕррор | ИмпортЕррор се појављује када покушавате да увезете модул који није присутан. Ова врста изузетка се јавља ако сте погрешили у куцању у имену модула или модула који није присутан у стандардној путањи. |
ИндекЕррор | ИндекЕррорис се подиже када покушате да упутите секвенцу која је ван опсега. |
КеиЕррор | Када се одређени кључ не пронађе у речнику, покреће се изузетак КеиЕррор. |
НамеЕррор | НамеЕррор се појављује када се на име говори у коду који никада не постоји у локалном или глобалном простору имена. |
ВалуеЕррор | Грешка вредности се појављује када функција или уграђена операција прими аргумент који је можда исправног типа, али нема одговарајућу вредност. |
ЕОФеррор | Ова врста грешке се јавља када једна од уграђених функција (инпут () или рав_инпут ()) достигне ЕОФ стање без читања података. |
ЗероДивисонЕррор | Ова врста грешке се јавља када се дељење или модул нулом одвија за све нумеричке типове. |
ИОЕррор- | Ова врста грешке настаје када операција улаза / излаза закаже. |
синтаксна грешка | СинтакЕррорс настале када постоји грешка у Питхон синтакси. |
ИндентатионЕррор | Ова грешка се јавља када увлачење није правилно дефинисано |
Остали важни Питхон изузеци
Изузетак | Опис |
АритхметицЕкцептион | Аритметичка грешка, попут дељења са нулом. |
АрраилндекОутОфБоундсЕкцептион | Индекс низа је изван граница. |
АрраиСтореЕкцептион | Додељивање вам помаже елементу низа некомпатибилног типа. |
ЦлассЦастЕкцептион | Неважећа глумачка екипа |
МлегалМониторСтатеЕкцептион | Незаконит рад монитора, попут чекања на откључаној нити. |
МлегалСтатеЕкцептион | Окружење или апликација су у погрешном стању. |
ЦлассНотФоундЕкцептион | Предмет није пронађен. |
ЦлонеНотСуппортедЕкцептион | Покушај клонирања објекта који не примењује интерфејс који се може клонирати. |
Илегални АццессЕкцептион | Приступ предавању је одбијен. |
ИнстантиатионЕкцептион | Појављује се када покушавате да креирате објекат интерфејса или апстрактне класе. |
ЦлонеНотСуппортедЕкцептион | Покушај клонирања објекта који не примењује интерфејс. |
Грешка у односу на изузетке
Грешка | Изузеци |
Све грешке у Питхону су неозначени тип. | Изузеци укључују и означени и непроверени тип. |
Грешке се јављају у време извођења које компајлеру нису познате. | Изузеци се могу опоравити руковањем њима уз помоћ блокова три-цатцх. |
Грешке су углавном узроковане околином у којој је покренута апликација. | Сама апликација узрокује изузетке. |
Примери: ОутофМемориЕррор | Примери: Проверени изузеци, СКЛ изузетак, НуллПоинтерЕкцептион, итд. |
Резиме
- Изузетак је грешка која се догодила током извршавања програма.
- Изузетак указује на то да се, иако се догађај може догодити, ова врста догађаја догађа ретко.
- Уобичајени примери изузетака су 1) Дељење нулом, 2) Приступ датотеци која не постоји, 3) Додавање два некомпатибилна типа.
- Изузетак је Питхон објекат који представља грешку.
- Изјава три укључује кључну реч три, праћена двотачком (:) и пакетом кода у којем се могу појавити изузеци. Има једну или више клаузула.
- Блокови хватања узимају по један аргумент, што је врста изузетка коју ће вероватно ухватити.
- Израз рисе наводи аргумент који иницијализује објекат изузетка.
- Коначно, блок се увек извршава без обзира на изузетак или не.