✦ Srednji nivo Pythona i OOP Kvalitet koda

L2 · Koncept 03 · Kvalitet koda i testiranje

Tehnike debagovanja
Pronađi greške, razumi uzrok i nauči da ih ispraviš.

Nauči smiren i ponovljiv način da pronađeš neočekivano ponašanje, razumeš njegov uzrok i proveriš ciljanu ispravku.

Cilj učenjaPrepoznaj česte vrste grešaka, čitaj traceback, pregledaj vrednosti i koristi breakpoint da pratiš Python kod korak po korak.
01 Uči02 Radi lokalno03 Proveri razumevanje

Učenje kao gost

Učiš kao gost — sačuvaj svoj napredak!

Napravi besplatan nalog i uči uz Sloby AI mentora, proveru razumevanja i praćenje napretka.

Cela platforma je besplatna tokom 2026. Foundations ostaje zauvek besplatan.

Debagovanje znači pronaći uzrok, a ne nasumično isprobavati ispravke.

Pisanje koda je jedan zadatak. Pokretanje programa pokazuje šta on zaista radi. Debagovanje počinje kada je to ponašanje neočekivano: ponovi problem, posmatraj tragove, pronađi uzrok, napravi malu ispravku i proveri rezultat.

Reproduce  →  Observe  →  Find the cause  →  Fix  →  Verify

1. Run the same input that shows the problem.
2. Read the error message or compare the actual result with the expected result.
3. Form a small hypothesis and inspect the relevant line or value.
4. Change only what is needed.
5. Run the program again and check for new problems.

Na primer, ako je cena previsoka, nemoj odmah prepisati ceo obračun. Najpre ponovi problem sa istom cenom i popustom, posmatraj međuvrednosti, a zatim proveri formulu koja je dala neočekivani rezultat.

Dobar postupak debagovanja menja jednu ideju odjednom. Tako je lakše utvrditi da li je izmena rešila pravi uzrok ili samo sakrila simptom.

↳

Počni od dokaza: Poruka o grešci, traceback, iznenađujući rezultat i vrednost promenljive su tragovi. Svaki trag sužava deo programa koji vredi istražiti.

Tri česte vrste problema
# Syntax error
if cena > 100
    print("Skupo")

# Runtime error
cena = 100
kolicina = 0
print(cena / kolicina)

# Logic error
cena = 100
popust = 20
nova_cena = cena + cena * popust / 100
print(nova_cena)

Prvi primer ima SyntaxError zato što liniji if nedostaje dvotačka. Drugi tokom izvršavanja podiže ZeroDivisionError. Treći program radi, ali dodavanje popusta povećava cenu: to je logička greška, zato traceback možda uopšte neće postojati.

Čitaj traceback odozdo nagore
Traceback (most recent call last):
  File "main.py", line 5, in <module>
    rezultat = 100 / 0
ZeroDivisionError: division by zero

Traceback (most recent call last) uvodi istoriju poziva. Ime fajla i broj linije pokazuju gde je Python primetio izuzetak. Poslednja linija navodi izuzetak i njegovu poruku. U većem programu raniji stack frame može sadržati odluku koja je dovela do pogrešne vrednosti, zato je traceback koristan trag, a ne potpuno objašnjenje.

Koristi print() da pregledaš vrednost
cena = 200
popust = 10

iznos_popusta = cena * popust
print("DEBUG:", iznos_popusta)

nova_cena = cena - iznos_popusta
print(nova_cena)

# Correct calculation:
iznos_popusta = cena * popust / 100

Privremeni DEBUG ispis otkriva da je iznos popusta 2000 umesto 20. Deljenje procenta sa 100 ispravlja formulu. Ukloni privremene DEBUG ispise nakon istraživanja kako kasnije ne bi postali zbunjujući izlaz.

Pokreni VS Code debugger
1. Open the Python file and choose the correct interpreter.
2. Click left of a line number to add a breakpoint.
3. Start Run and Debug or press F5.
4. If asked, choose Python File debugging with the Python extension installed.
5. The program stops before it executes the breakpoint line.

Breakpoint zaustavlja program na izabranom mestu da bi mogao/la da pregledaš njegovo stanje. Raspored VS Code-a i prečice na tastaturi mogu se razlikovati zbog operativnog sistema ili podešavanja, pa su dugmad debugger toolbar-a uvek dobra alternativa.

Prati obračun popusta korak po korak
def cena_sa_popustom(cena: float, popust: float) -> float:
    iznos_popusta = cena * popust / 100
    nova_cena = cena - iznos_popusta
    return nova_cena

print(cena_sa_popustom(200, 10))

Postavi breakpoint na prvu liniju unutar funkcije. U panelu Variables najpre pregledaj cena i popust. Step Over izvršava jednu liniju bez ulaska u pozvanu funkciju; Step Into ulazi u funkciju kada je to moguće; Step Out nastavlja dok se trenutna funkcija ne završi; Continue radi do sledećeg zaustavljanja. Posmatraj kako se iznos_popusta i nova_cena pojavljuju tokom izvršavanja.

Praktična strategija debagovanja

  1. 1. Ponovi problemKoristi isti ulaz ili radnju koja prikazuje grešku. Problem koji ne možeš da ponoviš teže je istražiti.
  2. 2. Pročitaj tragPažljivo pročitaj traceback, tip greške ili stvarni rezultat. Kod logičke greške zapiši koji rezultat si umesto toga očekivao/la.
  3. 3. Postavi pretpostavkuPostavi jedno usmereno pitanje, kao što je „Da li je kolicina ovde nula?“ ili „Da li sam procenat koristio/la kao ceo broj?“
  4. 4. Pregledaj stanje programaDodaj privremeni print() ili se zaustavi na breakpointu. Proveri vrednosti i redosled kojim se linije izvršavaju.
  5. 5. Napravi jednu ciljanu izmenu i proveri jePonovo pokreni isti scenario. Potvrdi i da je prvobitni problem ispravljen i da izmena nije napravila novi.

Navike debagovanja koje treba izbegavati

  • Menjanje mnogo linija odjednomViše izmena može sakriti koja je pomogla ili uvela novu grešku. Neka svaki pokušaj bude mali.
  • Čitanje samo poslednje reči poruke o grešciTip izuzetka, fajl, broj linije i okolni kod daju koristan kontekst.
  • Ostavljanje ispisa za debagovanje u završnom programuPrivremeni ispisi su korisni tokom istraživanja, ali ih zatim ukloni ili zameni namernim izlazom programa.

Pronađi pet grešaka — izazov za debagovanje

Radi ovo u VS Code-u

Preuzmi mali program za obradu porudžbina sa pet namernih problema. Istražuj jedan trag odjednom, a zatim proveri završne kontrolne vrednosti.

Preuzmi početni projekat
Projekat za obradu porudžbina sa pet grešaka
debugging_five_bugs/
├── main.py
├── porudzbine.py
├── podaci.py
├── README_SR.md
└── README_EN.md

Početni program je namerno neispravan. Prati traceback i pregledaj vrednosti korak po korak; ne očekuj da se prvo pokretanje završi.

Lokalno debaguj projekat

  1. Otvori Python fajl i ponovi problemPokreni preuzeti program jednom pre bilo kakve izmene. Sačuvaj traceback ili neočekivani izlaz kao dokaz.
  2. Izaberi jedan alat za pregledKoristi privremeni print() ili breakpoint, a zatim pregledaj jednu vrednost ili jednu liniju toka programa.
↳

Dok debaguješ: python main.py Ponovo pokreni isti primer nakon svake ciljane ispravke.

Podsetnik za VS Code debugger

  • Koristi trenutno stanje programaPanel Variables prikazuje vrednosti na trenutnoj tački zaustavljanja. Continue, Step Over, Step Into i Step Out pomeraju izvršavanje na različite načine.

Šta će se dogoditi kada se ovaj kod pokrene?

Vrednosti imaju tipove koji su ispravni za množenje, ali da li su to vrste vrednosti koje je ovaj obračun cene nameravao da koristi?

def ukupna_cena(cena, kolicina):
    return cena * kolicina

print(ukupna_cena("100", 3))
Izaberi izlaz

Izgrađuj samopouzdanje samostalnim radom

Istraži praznu listu ocena

Nemoj odmah pisati potpuno rešenje. Najpre opiši kako bi istražio/la ovu funkciju i proverio/la bezbednu ispravku.

Vaš ciljObjasni šta se dešava za praznu listu, kako bi pronašao/la uzrok, kako bi zaštitio/la funkciju i kako bi zatim proverio/la prazne i neprazne liste.
def prosecna_ocena(ocene):
    zbir = sum(ocene)
    return zbir / len(ocene)

Radi u svom lokalnom VS Code folderu

Nagoveštaji korak po korak
  • Pokušaj da predvidiš vrednost len(ocene) kada je lista prazna.
  • Koristi tip greške i liniju koja deli kao prve tragove.
  • Nakon zaštite praznog slučaja pokreni i primer sa ocenama.

Pitaj Slobyja jedno vodeće pitanje o tracebacku, vrednosti promenljive ili breakpointu; nemoj tražiti da otkrije potpuno rešenje izazova.

Sloby, maskota Python AI Tutora

Tvoj mentor za učenje

Prijavite se da pitate Slobyja

Napravite besplatan nalog ili se prijavite za AI smernice tokom učenja.

Prijavite se da proverite svoje razumevanje

Napravite besplatan nalog ili se prijavite da biste dobili AI povratnu informaciju i sačuvali napredak u učenju.

Python AI Tutor · Uči razumevanjem, a ne samo pokretanjem koda.