Čtení chyb

Chyby k programování patří. Dělají je i zkušení programátoři, a to každý den. Důležité je umět je rychle najít a opravit, a s tím vám pomůžou chybové hlášky.

Když Python nemůže váš program provést, ukáže pod výstupem červenou chybovou hlášku. Například tento program má na druhém řádku překlep:

cena = 120
print(cna)

Python skončí touto hláškou:

Traceback (most recent call last):
  File "<exec>", line 2, in <module>
NameError: name 'cna' is not defined. Did you mean: 'cena'?

Možná vypadá děsivě, ale snadno se čte, když začnete odspodu:

  • Poslední řádek říká, co se pokazilo. Před dvojtečkou je typ chyby, tady NameError (chyba názvu). Za dvojtečkou je anglicky popis: název cna není definovaný, takže ho Python nezná. Někdy Python dokonce navrhne opravu: Did you mean: 'cena'? znamená „Mysleli jste cena?“
  • Řádek nad ním říká, kde chyba nastala: line 2, tedy na druhém řádku. File "<exec>" a in <module> jen říkají, že jde o váš program, takže si jich nemusíte všímat.
  • První řádek, Traceback (most recent call last), je jen nadpis: to, co následuje, sleduje chybu zpátky až k místu, kde nastala.

Trochu jinak vypadá SyntaxError (chyba syntaxe). Znamená, že kód porušuje pravidla zápisu Pythonu, jeho syntaxi. Většinou chybí uvozovka nebo závorka:

print("Ahoj"

Python skončí touto hláškou:

Traceback (most recent call last):
  File "<exec>", line 1
    print("Ahoj"
         ^
SyntaxError: '(' was never closed

Python ukáže řádek s chybou a místo označí znakem ^: tady jde o závorku, která nebyla nikdy uzavřena. Chybějící uvozovka skončí chybou SyntaxError: unterminated string literal (detected at line 1), tedy text (textový řetězec), který nikde nekončí. Python si před spuštěním projde celý program, takže když je v něm chyba syntaxe, neprovede se vůbec nic, ani řádky před chybou.

Časté jsou ještě dvě chyby:

  • NameError (chyba názvu): použili jste název, který Python nezná. Většinou jde o překlep (cna místo cena, nebo Cena, protože záleží na velikosti písmen), o proměnnou použitou dřív, než byla vytvořena, nebo o text bez uvozovek: print(Anna).
  • TypeError (chyba typu): pokusili jste se s hodnotou udělat něco, co její typ nedovoluje, například spojit textový řetězec s číslem: "5" + 3.

Při chybě NameError nebo TypeError se program provádí, dokud na chybu nenarazí, a pak skončí. Co vypsal předtím, ve výstupu zůstane. To je užitečné vodítko: chyba je až za posledním print(), který ještě něco vypsal.

Když dostanete chybu, přečtěte si nejdřív poslední řádek hlášky, pak najděte řádek, o kterém mluví, a chybu opravte. Potom program spusťte znovu: o kus dál může být další chyba.

Pokyny

Program v editoru obsahuje tři chyby. Spusťte ho, přečtěte si chybovou hlášku, opravte chybu a program spusťte znovu. Opakujte to, dokud program nevypíše:

Hráč: Anna
Body: 10
Body po bonusu: 15

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

10/11