Како се носити са изузецима у Питхону

Како се носити са изузецима у Питхону

Руковање изузецима је ваша могућност да прилагодите и прикажете поруке о грешци за делове вашег програма који не функционишу.





Било да правите веб локацију, правите АПИ, модул или било који други производ користећи Питхон, ваша способност ефикасног руковања изузецима омогућава вам да изричито наведете узрок грешке.





Овде ћемо погледати како можете да рукујете изузецима у Питхону.





Како руковање изузецима функционише у Питхону

Када постављате изузетке, говорите Питхону да прикаже поруку кад год код не успе. Руковање изузецима је као да кажете некоме да покуша да подигне тег. А ако не могу, требали би вас обавијестити.

Међутим, да бисте подигли изузетак у Питхону, рећи ћете Питхону да покуша да покрене одређени блок кода. Ако тај блок не успе, можете затражити од Питхона да подигне дефинисани изузетак неуспешном коду.



Када треба да користите изузетке у програмирању на Питхону?

У већини случајева стандардне Питхон грешке можете маскирати помоћу изузетака. Али морате остати опрезни, јер то може узроковати проблеме у отклањању грешака. Сходно томе, можда ће вам бити тешко да откријете основни узрок евентуалне грешке.

Стога бисте требали користити изузетке када сте довољно тестирали свој код и сигурни сте да ради. На крају, најбоља је пракса да их користите за решавање потенцијалних грешака које могу настати на крају корисника, а не на самом коду.





Другим речима, можете користити изузетке као алатку упозорења да бисте водили кориснике о томе како да користе ваш програм.

Руковање Питхон изузецима

Да бисте обрадили изузетке у Питхону, прво морате да умотате свој код у покушај ... осим блокирати. Повремено ћете можда морати да укључите и коначно изјаву о даљим радњама, у зависности од ваших потреба.





Концепт кодирања Питхон изузетака генерално изгледа овако:

try:
'code to be executed'
except:
'error message'

Као што је раније поменуто, можете користити и коначно у блоку изузетака. Али код који пишете унутар а коначно клаузула је независна и извршава се без обзира да ли постоји изузетак или не.

У суштини, добро ће вам доћи ако имате још један блок кода који желите да радите непрекидно, без обзира на то шта се дешава у оквиру покушај ... осим блокирати.

Ево примера:

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

У горњем коду, молимо вас да поново покренете ради непрекидно, без обзира да ли постоји изузетак или не.

Ан елсе стање такође може следити осим изјава:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

Сада покушајте поново са дефинисаном „Б“:

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

Горе наведени примери су нестандардни изузеци. Али можете имати експлицитнији изузетак када комбинујете уграђене (дефинисане) изузетке са нестандардизованим:

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

Горњи изузетак прво проверава да ли постоји НамеЕррор у покушати блокирати. Затим штампа стандард НамеЕррор прво изузетак ('име' Б 'није дефинисано'). И подржава га уз ваш писани изузетак („Б треба дефинисати, молим вас“).

Везано: Основни принципи програмирања које сваки програмер мора знати

галаки ацтиве 2 вс галаки ватцх 3

А ако желите да се позабавите ланцем изузетака, можете пратити и покушати блок са многима осим изјаве. Ово је прилично згодно ако имате покушати блок има потенцијал да има много изузетака:

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

Шта ако је подела важећа? На пример, замена Ф = 7/0 у горњем коду са Ф = 7/5 даје:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

Кориснички дефинисани изузеци у Питхону

Такође можете смислити свој изузетак и позвати их касније у свом програму. Ово вам омогућава да дате посебан опис свог изузетка и именујете га како желите.

Без обзира на то, сваки изузетак који дефинише корисник (директно или индиректно) и даље долази из уграђеног Изузетак класе Питхон.

Пример у наставку упућује на базу Изузетак директно позивом Грешка у раду из њега:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

Напоменути да цоннецтионЕррор , у овом случају, је класа коју дефинише корисник и коју можете подићи кад год вам затреба у вашем програму.

Повезан: Водич за почетнике у регуларним изразима са Питхоном

Кориснички дефинисан изузетак можете направити тако што ћете га извести директно из Изузетак основна класа. Изузетак испод, међутим, спречава одузимање 5 од 6 и позива изузетак из основне класе директно:

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

У пракси можете користити изузетак који сте раније дефинисали тако што ћете га позвати у другој функцији. На пример, можете да креирате флоатЕррор то дозвољава само додавање два пловка:

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

Зато што сте сада дефинисали а ФлоатЕррор класе, Питхон га подиже ако покушате да додате два не-плутајућа литерала користећи аддтвоФлоат функција.

Можете одштампати ФлоатЕррор класе у истој Питхон датотеци где сте је креирали да видите шта се дешава:

print(FloatError)
Output:

ФлоатЕррор , међутим, није уграђени Питхон изузетак. Ово можете да проверите позивом ФлоатЕррор у другој свежој Питхон датотеци у којој нисте креирали ову класу:

print(FloatError)
Output: NameError: name 'FloatError' is not defined

Добијате а НамеЕррор јер га Питхон не препознаје као стандардни изузетак.

Можете покушати да сами дефинишете друге класе грешака да видите како се оне играју.

Учините своје Питхон програме прилагођенијима корисницима уз изузетке

У Питхону постоји много стандардних изузетака. Али можете дефинисати и свој. Без обзира на то, једноставност коришћења програма донекле зависи од тога како се носи са различитим изузецима (било кориснички дефинисаним, неспецифичним или стандардним).

Изузеци вам, међутим, дозвољавају да одредите како би ваш програм требало да функционише када корисници комуницирају са њима. Јасно и концизно навођење узрока грешке такође даје корисницима упутства о томе шта раде погрешно, а понекад их упућује у правом смеру.

Објави Објави Твеет Емаил Како отклонити грешке у Питхон коду

Опремите се знањем како да згњечите сваку Питхон грешку на свом путу.

Прочитајте следеће
Повезане теме
  • Програмирање
  • Питхон
  • Кодирање Туториали
О аутору Идисоу Омисола(94 објављена чланка)

Идову је страствен у било чему паметном технологији и продуктивности. У слободно време игра се кодирањем и прелази на шаховску таблу кад му је досадно, али такође воли да се повремено одваја од рутине. Његова страст да људима покаже пут око савремене технологије мотивише га да пише више.

Више од Идову Омисола

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили