Ефикасно отклањање грешака помоћу изјаве Питхон Ассерт

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

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

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

Почнимо!

Како се користи изјава Ассерт у Питхон-у

Научићемо синтаксу за коришћење наредбе ассерт, а затим ћемо наставити са кодирањем неких примера.

Синтакса изјаве о потврди

Почнимо са синтаксом за коришћење изјаве ассерт у Питхон-у:

assert expression, message

овде,

  • израз је било који важећи Питхон израз који треба проценити. Ово може бити услов за вредност променљиве, истиниту вредност променљиве, повратну вредност из функције и још много тога.
  • Све док израз има вредност Тачно, изјава ассерт не даје грешку нити враћа ништа. Ово указује да програм ради како се очекује.
  • Ако израз више није Тачан, покреће се изузетак АссертионЕррор.
  • порука је опциони низ. Можете да наведете поруку која се приказује у праћењу кад год се појави изузетак АссертионЕррор.

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

  Како да поправите да нема звука на ТВ-у када се преноси на Цхромецаст са Цхроме-а

Примере кода који се користе у овом водичу можете пронаћи у овом ГитХуб сажетку.

Примери Питхон-ових изјава

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

Да бисте проверили да случајно нисте поставили променљиву попуста на вредност, можете додати тврдњу. Израз за процену је: попуст <= мак_дисцоунт.

>>> max_discount = 50
>>> discount = 20
>>> assert discount <= max_discount

Овде је попуст (20) мањи од мак_дисцоунт (50). Дакле, изјава ассерт не даје никакву грешку.

Изузетак АссертионЕррор

Ако је променљива попуста подешена на вредност већу од мак_дисцоунт, покреће се изузетак АссертионЕррор.

>>> discount = 75
>>> assert discount <= max_discount
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

Знамо да нам изјава ассерт такође омогућава да наведемо опциони низ поруке.

Хајде да такође користимо низ поруке који даје описнију дијагностичку информацију. Наредби ассерт, додајмо Питхон ф-стринг који такође садржи вредности попуста и мак_дисцоунт.

>>> assert discount <= max_discount, f"discount should be at most {max_discount}; got discount = {discount}"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: discount should be at most 50; got discount = 75

Као што се види у излазној ћелији изнад, изузетак АссертионЕррор сада укључује вредности променљивих попуста и мак_дисцоунт.

Отклањање грешака и тестирање Питхон функција помоћу Ассерт-а

Када дефинишете функције, понекад можете ненамерно унети грешке (логичке грешке) које ће спречити вашу функцију да ради како је предвиђено.

Узмимо пример. Претпоставимо да постоји тест у разреду и ученицима се даје шанса да покушају са додатним питањем. Сваки ученик који покуша да постави бонус питање добиће 10 додатних поена на тесту. 😄

Размотрите следећу функцију гет_финал_сцоре:

  • Узима тренутни резултат, резултат и логички бонус.
  • Ако је ученик одговорио на бонус питање, Булов бонус је Тачан и добија 10 поена више од тренутног резултата.
  • Функција затим враћа коначан резултат.
def get_final_score(score,bonus):
    if bonus:
        score += 10
    return score

Направимо неколико позива функцији. Видимо да су за резултате од 34 и 40 са бонусом постављеним на Тачно и Нетачно, коначни резултати 44 и 40, респективно.

print(get_final_score(34,True))
# 44
print(get_final_score(40,False))
# 40

Међутим, максимални број поена на тесту је, рецимо, 50. Дакле, ако ученик постигне 49 и такође је одговорио на бонус питање, функција гет_финал_сцоре ће срећно израчунати коначан резултат на 59.

print(get_final_score(49,True))
# 59

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

  Како испразнити ДНС кеш на Мац-у

Дакле, хајде да иницијализујемо променљиву мак_сцоре. И ухвати враћени резултат из функције у променљивој финал_сцоре.

Након тога додајемо тврдњу која проверава да ли је финал_сцоре мањи од мак_сцоре.

def get_final_score(score,bonus):
    if bonus:
        score += 10
    return score

final_score = get_final_score(47,True)
max_score = 50

assert final_score <= max_score

Сада добијамо изузетак АссертионЕррор за позив функције гет_финал_сцоре(47,Труе):

Traceback (most recent call last):
  File "main.py", line 17, in <module>
    assert final_score <= max_score
AssertionError

Сада додајемо описни ф-стринг у Питхон наредбу ассерт:

assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
Traceback (most recent call last):
  File "main.py", line 17, in <module>
    assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
AssertionError: final_score should be at most 50; got 57

Измена функције

Хајде да се вратимо и изменимо дефиницију функције гет_финал_сцоре да поправимо неочекивано понашање:

  • Функција гет_финал_сцоре такође узима мак_сцоре као параметар.
  • Проверавамо да ли је бонус Тачан. Ако је тачно, додајемо 10 поена променљивој резултата.
  • Затим проверавамо да ли је резултат већи од мак_сцоре. Ако је тако, враћамо мак_сцоре.
  • У супротном, враћамо резултат.

Сада смо обезбедили да коначни резултат увек буде мањи или једнак мак_сцоре.

def get_final_score(score,bonus,max_score):
    if bonus:
        score += 10
    if score > max_score:
        return max_score
    return score

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

Напомена о изузетку АссертионЕррор

Иако се изузетак АссертионЕррор јавља када се израз процени на Фалсе, треба да запамтимо да такве грешке не третирамо као изузетке. То значи да не треба да радимо нешто овако:

try:
    <doing this>
except AssertionError:
    <do this>

У претходном примеру о гет_финал_сцоре, користили смо тврдњу да проверимо да ли је финал_сцоре мањи од мак_сцоре. Затим смо модификовали дефиницију функције тако да нема грешака у тврдњи.

  16 најбољих МонгоДБ ГУИ апликација

Томе служе тврдње. То су провере исправности кода и помоћ у писању чистијег кода. С друге стране, руковање изузецима је предвиђање и руковање неочекиваним грешкама у току извршавања. Они често укључују неважеће типове и вредности уноса.

Да резимирамо, требало би да користите Питхон наредбу ассерт за ефикасно отклањање грешака и да не третирате АссертионЕррорс као изузетке.

Закључак

Овај водич вам је помогао да разумете како да користите изјаву ассерт у Питхон-у. Ево резимеа онога што сте научили:

  • Питхон изјаве (тврдње) имају облик израза ассерт. Ово проверава да ли је израз Тачан. Ако се не процени на Тачно, покреће се изузетак АссертионЕррор.
  • Такође можете користити ассерт са синтаксом ассерт израз, порука. Ово ће одштампати стринг поруке кад год се деси изузетак АссертионЕррор.
  • Требало би да запамтите да не примењујете руковање изузецима да бисте решили грешке у тврдњи. И користите тврдње као користан алат за отклањање грешака за проверу исправности вашег кода.

Као програмеру, тврдње вам помажу у отклањању грешака. Да бисте осигурали да све појединачне компоненте (модули) пројекта раде како се очекује, можете научити како писати јединичне тестове у Питхон-у.

Затим погледајте ову листу почетничких Питхон пројеката на којима можете радити.