Lekcie
Ako hľadať a riešiť chyby v kóde - debugovanie
Počítač urobí presne to, čo mu povieme, aby spravil. Toto je v ideálnom svete super, avšak nie v našom, v ktorom robia ľudia chyby. Nauč sa, ako ich hľadať, ako ich riešiť a ako im predchádzať.
Chyby sú súčasťou programovania
Každý programátor, bez ohľadu na jeho skúsenosti, robí chyby. Nikto nepíše perfektný kód na prvý pokus. Rozdiel medzi začiatočníkom a skúseným programátorom nie je v tom, že skúsený chyby nerobí - je v tom, že ich vie rýchlo nájsť a opraviť. Táto zručnosť sa nazýva debugovanie (z anglického debugging).
Keď tvoj program nefunguje tak, ako má, Python ti vždy dá nejakú spätnú väzbu. Táto spätná väzba je chybová správa - takzvaný error. Mnohí začiatočníci sa errorov boja, ale v skutočnosti sú tvoji najlepší kamaráti. Error ti hovorí, čo je zle a kde to je zle.
Základné typy errorov
Python rozlišuje viacero typov errorov. Tu sú tie, s ktorými sa budeš stretávať najčastejšie:
| Typ erroru | Príčina | Príklad |
|---|---|---|
| SyntaxError | Chybný zápis kódu, Python mu nerozumie | if x == 1 |
| NameError | Premenná alebo funkcia neexistuje | print(premenna) |
| TypeError | Nesprávny dátový typ pri operácii | "5" + 5 |
| ValueError | Hodnota má zlý obsah pre danú operáciu | int("ahoj") |
| IndexError | Index mimo rozsahu zoznamu | zoznam[99] |
| IndentationError | Chybné odsadenie kódu | def f():\nprint() |
| ZeroDivisionError | Delenie nulou | 10 / |
Ako čítať chybovú správu
Keď Python narazí na chybu, vypíše takzvaný traceback. Na prvý pohľad to vyzerá strašidelne, ale stačí vedieť, čo kde hľadať. Pozri sa na tento príklad
Traceback (most recent call last):
File "program.py", line 3, in
vysledok = cislo / 0
ZeroDivisionError: division by zero
Čo nám to hovorí?
- Posledný riadok: typ erroru a jeho popis. Vždy začni čítať odtiaľto - ZeroDivisionError: division by zero hovorí jasne, čo sa stalo.
- Riadok nad tým: ktorý riadok kódu chybu spôsobil (riadok 3, vyraz cislo / 0).
- Názov súboru a číslo riadku: kde presne sa error nachádza (program.py, line 3).
Čítaj chybové správy vždy zdola nahor. Posledný riadok ti dá typ a popis chyby, riadky nad ním ti ukážu, kde k nej došlo.
SyntaxError - Python ti nerozumie
SyntaxError nastane vtedy, keď kód nie je napísaný správne - podobne ako keby si napísal vetu bez zmyslu. Python takýto kód ani nespustí, hneď ti povie, že niečo nesedí.
Časté príčiny
- Chýbajúca dvojbodka za if, for, while alebo def.
- Nezatvorená zátvorka alebo úvodzovky.
- Písanie = namiesto == v podmienke.
# Chyba: chýba dvojbodka
if vek > 18
print("Dospelý")
# Správne:
if vek > 18:
print("Dospelý")
NameError - premenná, ktorú Python nepozná
NameError sa objaví vtedy, keď sa snažíš použiť premennú alebo funkciu, ktorá neexistuje. Najčastejšie ide o preklep v názve premennej.
meno = "Mišo" print(mene) # NameError: name 'mene' is not defined # Správne: print(meno)
Ďalšia častá príčina: volanie funkcie pred jej definíciou.
pozdrav() # NameError - funkcia ešte neexistuje!
def pozdrav():
print("Ahoj!")
TypeError - nesprávny dátový typ
TypeError nastane vtedy, keď sa snažíš spraviť operáciu s dátovým typom, ktorý ju nepodporuje. Najčastejšie, keď zabudneš pretypovať vstup od používateľa.
vek = input("Zadaj vek: ") # vek je str!
if vek >= 18: # TypeError: '>=' not supported between str and int
print("Dospelý")
# Správne:
vek = int(input("Zadaj vek: "))
if vek >= 18:
print("Dospelý")
ValueError - správny typ, zlá hodnota
ValueError nastane vtedy, keď je dátový typ správny, ale hodnota v ňom nemá pre danú operáciu zmysel. Klasický príklad: snažíš sa pretypovať text, ktorý nie je číslo, na int.
cislo = int("ahoj") # ValueError: invalid literal for int()
cislo = int("3.14") # ValueError: int() nemôže spracovať desatinné číslo ako str
# Správne:
cislo = float("3.14") # 3.14
IndentationError - odsadenie nesedí
Python je citlivý na odsadenie. Každý blok kódu (pod if, for, while, def) musí byť rovnomerne odsadený. IndentationError dostaneš, keď odsadenie nesedí.
def pozdrav():
print("Ahoj!") # IndentationError: expected an indented block
# Správne:
def pozdrav():
print("Ahoj!")
Používaj vždy rovnaký spôsob odsadenia. Buď samé tabulátory (TAB) alebo samé medzery (odporúčané sú 4). Nikdy ich nemiešaj.
Postup pri hľadaní chyby
Keď program nefunguje, nepanikár. Skús tento postup:
- Prečítaj error. Pozri sa na typ erroru a na číslo riadku. Toto ti ukáže, kde začať hľadať.
- Pozri sa na označený riadok. Chyba je niekedy priamo tam, niekedy o riadok vyššie (napr. pri SyntaxError).
- Použi print() na kontrolu. Ak nevieš, aká je hodnota premennej v danom momente, jednoducho ju vypíš: print(premenna). Toto je najjednoduchší a najrýchlejší spôsob debugovania.
- Debuguj po častiach. Ak máš veľký problém, skús izolovať problematickú časť - odstrihni kód po častiach a nájdi, kde nastáva chyba.
- Hľadaj online. Skopíruj text erroru do Google alebo AI. Takmer každý error, na ktorý narazíš, riešil niekto pred tebou.
Debugovanie pomocou print()
Najjednoduchší spôsob, ako zistiť, čo sa deje vo vnútri programu, je vypísať si hodnoty premenných pomocou print(). Toto sa nazýva print debugging a používajú ho aj skúsení programátori.
def vypocitaj_zlavu(cena, zlava):
print("cena:", cena) # Skontroluj vstup
print("zlava:", zlava) # Skontroluj vstup
vysledok = cena - (cena * zlava / 100)
print("vysledok:", vysledok) # Skontroluj výsledok
return vysledok
Kde hľadať pomoc
Každý programátor hľadá pomoc online - to je úplne normálne. Tu sú najlepšie miesta:
- Google + text erroru: jednoducho skopíruj text chybovej správy do Google. Následne študuj, ako iní ľudia riešili tvoj problém.
- Stack Overflow alebo Reddit (a iné fórumy): najväčšie web stránky otázok a odpovedí o programovaní. S najväčšou pravdepodobnosťou tam niekto už riešil tvoj problém. Ak nie, tak si môžeš založiť účet a skúsiť tam hľadať pomoc od iných vývojárov a programátorov.
- Oficiálna dokumentácia Pythonu alebo dokumentácia knižnice.
- AI (napr. ChatGPT, Claude, Gemini): vie vysvetliť error, navrhnúť opravu alebo vysvetliť, prečo niečo nefunguje. Musíš dávať pozor, aby si AI nevymýšľalo informácie alebo ťa neviedlo v kruhoch.
AI je super pomocník, ale nesnaž sa mu hádzať celý kód a čakať, že ho napíše za teba. Skús najprv problém vyriešiť sám. Skús pochopiť, čo sa deje, prečo to nefunguje. AI ti má pomôcť pochopiť, nie robiť robotu za teba. Programovanie sa naučíš len tým, že budeš sám premýšľať.
Zopakuj si!
- Python ti vždy povie, čo je zle - čítaj chybové správy pokojne a zdola nahor.
- Poznáš základné typy errorov: SyntaxError, NameError, TypeError, ValueError, IndexError, IndentationError.
- Číslo riadku v errore ti ukáže, kde hľadať chybu.
- print() je tvoj najlepší kamarát pri hľadaní chýb.
- Keď si nevieš rady, hľadaj online - každý to robí.