Nežádoucí tzv. rekurze. Python se nezadře, vyhodí časem výjimku RecursionError
.
def sibenice():
vyhodnoceni()
sibenice() # pokus o opětovné spuštění hry
def vyhodnoceni():
sibenice() # pokus o opětovné spuštění hry
sibenice()
vstup = input('Zadej písmeno: ') # po stisku Enter je vstup == ''
'd' in 'čokoláda' # True
'x' in 'čokoláda' # False
'' in 'čokoláda' # True (sic!)
'čokoláda'.index('a') # 7
'čokoláda'.index('č') # 0
'čokoláda'.index('') # 0 (sic!)
'čokoláda'.count('') # 9 (sic!)
obesenec = """
+---.
| |
| O
| --|--
| / \
|
~~~~~~~""" # oběšenec s dřevěnou nohou z ráhna šibenice :-)
print(obesenec)
katakana = """ァアィイゥウェエォオカガキギクグ
ケゲコゴサザシジスズセゼソゾタダチ
ヂッツヅテデトドナニヌネノハバパヒ
ビピフブプヘベペホボポマミムメモャ
ヤュユョヨラリルレロヮワヰヱヲンヴ
ヵヶヷヸヹヺ"""
# text je "ァアィ イゥ"
for znak in text:
if znak in katakana:
pocet_katakana += 1 # chybně se započítávají i ' ' a '\n'
print(pocet_katakana)
Jedno z jednodušších řešení:
katakana = ''.join(katakana.split())
print(katakana)
FileNotFoundError
Konkrétně u kódu hry Šibenice se jednalo o výjimku, která neovlivňuje / neohrožuje fungování hry, takže je vhodné tuto výjimku ošetřit.
Chybový výstup by měl podávat co nejvíc relevantních informací. Uživatelský výstup by měl být natolik sdílný, aby bylo možno chybu dohledat, ale neměl by vyzrazovat citlivé informace o aplikaci samotné nebo datech.
Aplikace by měla být připravena na to, že chybí nebo nefunguje nějaká její klíčová kompomenta nebo nemá potřebná data.
try:
with open("obrazek" + str(chyba) + ".txt", encoding="utf-8") as soubor:
obsah = soubor.read()
except FileNotFoundError:
print("Nebyl nalezen obrázek k počtu chyb", chyba)
logging
import logging # modul pro sbirani zaznamu o behu programu, varovanich, chybach a vyjimkach
# uzivateli, do souboru, na vzdaleny server atd. (jsou mozne kombinace vseho)
try:
with open("katalogovy-list-" + produkt[0:4] + ".txt", encoding="utf-8") as soubor:
obsah = soubor.read()
except FileNotFoundError as e:
#
# tady program vrati chybovou hlasku na web stranku, napr.:
# Pri importu produktu SN56132746-54600-5 doslo k chybe. Import bude zastaven.
#
logging.exception("Soubor s nezbytnými daty '{}' nebyl nalezen. Produkt: {}".format(e.filename, produkt))
raise # chceme vyvolat vyjimku, protoze bez dat program nemuze dale pokracovat
# hrozi nekonzistence dat pri neuplnem importu
sibenice.txt
(s pomocí seznamů, které se naučíme dnes 😺)with open('sibenice.txt', encoding='utf-8') as soubor:
obsah_souboru = soubor.read()
sibenice = obsah_souboru.split('------------------')
sibenice[5] # obsahuje textový obrázek šibenice, úroveň 5