Руковање изузецима је ваша способност прилагођавања и приказивања порука о грешкама за делове програма који не успевају.
Без обзира да ли правите веб локацију, израђујете АПИ, модул или било који други производ користећи Питхон, ваша способност ефикасног руковања изузецима омогућава вам експлицитно навођење узрока грешке.
Овде ћемо погледати како можете да се носите са изузецима у Питхону.
Како руковање изузецима функционише у Питхону
Када покренете изузетке, кажете Питхону да прикаже поруку кад год блок кода закаже. Руковање изузецима је попут казивања некоме да покуша да дигне тег. А ако не могу, треба да вас обавесте.
Међутим, да бисте покренули изузетак у Питхону, рећи ћете Питхону да покуша да покрене одређени блок кода. Ако тај блок не успе, можете затражити од Питхона да подигне дефинисани изузетак за неуспели код.
Када треба да користите изузетке у програмирању на Питхон?
У већини прилика можете да маскирате стандардне Питхон грешке користећи изузетке. Али морате бити опрезни, јер то може проузроковати проблеме са отклањањем грешака. Због тога ће вам можда бити тешко да откријете основни узрок евентуалне грешке.
Због тога би требало да користите изузетке када сте довољно тестирали свој код и ако сте сигурни да он функционише. На крају, најбоље је користити их за руковање потенцијалним грешкама које могу настати на корисниковом крају, а не на самом коду.
Другим речима, изузетке можете користити као алатку за упозорење која ће кориснике упутити како да користе ваш програм.
Руковање Питхон изузецима
Да бисте обрадили изузетке у Питхону, прво морате да умотате свој код у покушај... осим блокирати. Повремено ћете можда морати да додате а коначно изјава за руковање даљим радњама, у зависности од ваших потреба.
Концепт кодирања изузетака из Питхона генерално изгледа овако:
покушати:
"код који треба извршити"
осим:
"порука о грешци"
Као што је раније поменуто, такође можете користити коначно у блоку за изузеће. Али код који напишете у а коначно клаузула је независна и ради без обзира постоји ли изузетак.
У суштини, добро дође ако имате још један блок кода који желите континуирано покретати без обзира на то шта се дешава у покушај... осим блокирати.
Ево примера:
покушати:
штампа (9 + 6)
осим:
испис ("порука о грешци")
коначно:
принт ("рестартуј поново")
Излаз:
15
молим вас поново покрените
У горњем коду, молим вас поново покрените ради континуирано, без обзира да ли постоји изузетак или не.
Ан иначе услов такође може пратити ан осим изјава:
покушати:
Ц = 2 + Б.
осим:
принт ("Б треба дефинисати")
иначе:
принт (у "Успешно додато! Резултат је% с "% (Ц))
Излаз: Б треба дефинисати
Покушајте поново са дефинисаним "Б":
покушати:
Б = 5
Ц = 2 + Б.
осим:
принт ("Б треба дефинисати")
иначе:
принт (у "Успешно додато! Резултат је% с "% (Ц))
Излаз: Додато успешно! Резултат је 7
Горњи примери су нестандардизовани изузеци. Али можете имати експлицитнији изузетак када комбинујете уграђене (дефинисане) изузетке са нестандардизованим:
покушати:
Ц = 2 + Б.
осим НамеЕррор као грешка:
испис (грешка, ":", "Б треба дефинисати, молим")
иначе:
принт (у "Успешно додато! Резултат је% с "% (Ц))
Излаз: име 'Б' није дефинисано: Б треба дефинисати, молим
Горе наведени изузетак прво проверава да ли постоји НамеЕррор у покушати блокирати. Затим штампа стандард НамеЕррор прво изузетак („име 'Б' није дефинисано“). И подржава је уз ваш писани изузетак („Б треба дефинисати, молим“).
Повезан: Основни принципи програмирања који сваки програмер мора знати
А ако желите да се позабавите низом изузетака, такође можете да додате знак покушати блок са многима осим изјаве. Ово је прилично згодно ако је ваш покушати блок има потенцијал да има много изузетака:
покушати:
Б = 5
Ц = 2 + Б.
Д = пловак (6)
Ф = 7/0
осим НамеЕррор као грешка:
испис (грешка, ":", "Б треба дефинисати, молим")
осим ВалуеЕррор као вал:
принт (вал, ":", "Не можете претворити те податке")
осим ЗероДивисионЕррор као зероерр:
принт (зероерр, ":", "Не можете поделити број са нулом")
иначе:
принт (у "Операција успешна! Резултати су:% с,% с и% с "% (Ц, Д, Ф))
Излаз: подела са нулом: Не можете поделити број са нулом
Шта ако је подела валидна? На пример, замена Ф = 7/0 у горњем коду са Ф = 7/5 даје:
Излаз: Операција успјешна! Резултати су: 7, 6,0 и 1,4
Кориснички дефинисани изузеци у Питхону
Можете и ви да изузмете свој изузетак и да их позовете касније у свом програму. Ово вам омогућава да дате конкретан опис свог изузетка и именујете га како желите.
Без обзира на то, сваки кориснички дефинисани изузетак (директно или индиректно) и даље долази из уграђеног Изузетак класа Питхон-а.
Пример примера испод наводи референцу на базу Изузетак директно позивањем Грешка у раду из њега:
цласс цоннецтионЕррор (РунтимеЕррор):
деф __инит __ (селф, валуе):
селф.валуе = вредност
покушати:
подизати цоннецтионЕррор ("Лоше име хоста")
осим цоннецтионЕррор као грешка:
испис (вредност погрешке)
Излаз: Лоше име хоста
Напоменути да цоннецтионЕррор, у овом случају, је кориснички дефинисана класа коју можете подићи кад год вам затреба у вашем програму.
Повезан: Водич за почетнике за регуларне изразе са Питхоном
Можете направити кориснички дефинисан изузетак изводећи га директно из Изузетак основна класа. Изузетак у наставку, међутим, спречава одузимање 5 од 6 и директно позива изузетак из основне класе:
грешке у класи (изузетак):
проћи
класа сикФивеЕррор (грешке):
деф __инит __ (селф, валуе, мессаге):
селф.валуе = вредност
селф.мессаге = порука
покушати:
подићи сикФивеЕррор (6-5, „Ово одузимање није дозвољено“)
осим сикФивеЕррор као е:
принт ("Дошло је до грешке:", нпр. порука)
Излаз: Дошло је до грешке: Ово одузимање није дозвољено
У пракси можете користити изузетак који сте раније дефинисали позивом у другој функцији. На пример, можете да направите флоатЕррор то омогућава само додавање два пловка:
# Прво позовите основне класе изузетака:
грешке у класи (изузетак):
проћи
# Следеће, изведите сопствени изузетак из основне класе:
класа ФлоатЕррор (грешке):
деф __инит __ (селф, валуе, мессаге):
селф.валуе = вредност
селф.мессаге = порука
# Креирајте функцију за додавање два пловка:
деф аддТвоФлоат (а, б):
иф (типе (а) и типе (б))! = флоат:
подићи ФлоатЕррор (а + б, "Бројеви морају бити плутајући да би се додали")
иначе:
испис (а + б)
аддТвоФлоат (4, 7)
Излаз: __маин __. ФлоатЕррор: (11, 'Бројеви морају бити плутајући да би се додали')
Јер сте сада дефинисали а ФлоатЕррор класе, Питхон га подиже ако покушате да додате два не-флоат литерала користећи аддтвоФлоат функцију.
Можете да одштампате ФлоатЕррор класе у истој Питхон датотеци у којој сте је креирали да бисте видели шта се дешава:
испис (ФлоатЕррор)
Излаз:
ФлоатЕррор, међутим, није уграђени Питхон изузетак. То можете потврдити позивом ФлоатЕррор у другој свежој Питхон датотеци у којој нисте креирали ову класу:
испис (ФлоатЕррор)
Излаз: НамеЕррор: име 'ФлоатЕррор' није дефинисано
Добијаш НамеЕррор јер га Питхон не препознаје као стандардни изузетак.
Можете покушати да дефинишете и друге класе грешака да бисте видели како се играју.
Учините своје Питхон програме једноставнијим за употребу, са изузецима
У Питхону постоје многи стандардни изузеци. Али можете дефинисати и своје. Без обзира на то, лакоћа коришћења вашег програма донекле зависи од тога како се бави разним изузецима (било да је то кориснички дефинисани, неспецифични или стандардни).
Изузеци вам омогућавају да одредите како ваш програм треба да функционише када корисници комуницирају с њима. Јасно и концизно навођење узрока грешке такође даје корисницима информације о томе шта раде погрешно, а понекад их упућује у правом смеру.
Опремите се знањем како да згњечите сваку Питхон грешку на вашем путу.
Прочитајте следеће
- Програмирање
- Питхон
- Водичи за кодирање
Идову је заљубљен у све паметне технологије и продуктивност. У слободно време игра се са кодирањем и пребацује се на шаховску таблу када му је досадно, али такође воли да се повремено отргне од рутине. Његова страст да људима покаже пут око модерне технологије мотивише га да пише више.
Претплатите се на наш билтен
Придружите се нашем билтену за техничке савете, прегледе, бесплатне е-књиге и ексклузивне понуде!
Још један корак…!
Молимо потврдите своју адресу е-поште у е-поруци коју смо вам управо послали.