3: Грешке


Што више и више програмирате, природно је да ћете наилазити на пуно грешака (или багова). Изазивање, разумевање и поправљање грешака је битан део програмирања. Python ће дати све од себе да уради све што му ви кажете, али ако не може да разуме шта се од њега тражи, онда неће покренути програм. Истворемено, Python ће покушати да вам да неке информације о томе шта је кренуло наопако, да би вам помогао да то поправите.

Пример: Синтаксна грешка

У овом првом примеру, заборавили смо да употребимо заграде које print захтева (...)

 

Пример: Грешка при покретању

У другом примеру, заборавили смо да дефинишемо променљиву zdravo. Python зна шта желите од њега, али пошто zdravo није дефинисано, догађа се грешка.

 

Синтаксна грешка се дешава када Python не може да разуме шта хоћете да кажете преко програма. Грешка по покретању се дешава када Python разуме шта хоћете да кажете преко програма, али наилази на проблеме док прати ваша упутства.

На српском, синтаксна грешка би била налик реченици:

Molim mačka pas majmun.

 

Граматика ове реченице нема смисла. Из перспективе српске граматике, недостаје јој глагол (акција).

 

У српском језику, грешка при покретању би била налик реченици

Molim te, pojedi klavir.

 

Реченица има смисла са граматичке перспективе – глагол и именица су јој на правилном месту – тако да знате шта се од вас тражи. Али наићи ћете на проблеме када покушате да поједете клавир (осим ако нисте термит). То се назива грешком при покретању јер се дешава након што се програм покрене.

Ево пар суптилнијих синтаксних грешака.

Пример: Синтаксна грешка

Синтаксна грешка би нестала када бисмо написали print(“Zdravo, svete!“)

 

Пример: Синтаксна грешка

 

 

Проблем је што је class посебна реч у Python-у. Да сте, на пример, написали kurs уместо class, било би у реду. Посебне (кључне) речи се не смеју користити за имена променљивих.

Листа свих кључних речи:

False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, for, from, global, if, import, in, lambda, nonlocal, not, or, pass, raise, try, while, with, yield

 

Ако користите наводнике око текста и заборавите други, или користите заграде и заборавите другу, добићете синтаксну грешку:

Пример: Синтаксна грешка
Заборављање другог наводника

Пример: Синтаксна грешка
Заборављена друга заграда

 

Грешке по покретању

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

 

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

Пример: Недефинисана променљива

 

дељење нулом, што у математици нема смисла

Пример: Дељење нулом

 

коришћење операција за различите врсте података

 

Пример: Сабирање текста и броја

 

Вежбе

Сада када је лекција готова, имамо три вежбе о дебаговању (поправљању грешака у програму).

Сваки од следећих програма у себи већ има неки подешен код. Ви треба само да промените неколико карактера (слова/симбола/бројева) да бисте поправили сваки програм.

 

Вежба кодирања: Лето
Поправите синтаксну грешку у предстојећем програму, тако да он одштампа збир свих бројева од 1 до 10. Смете да промените највише један карактер.

Вежба кодирања: Куповина
Купујете месо и млеко, али за њих постоји неки порез. Купујете млеко од 100 дин. и месо од 400 дин., а порез је 3%. Одштампајте пуну цену својих намирница, рачунајући и порез.