Přejít k hlavnímu obsahu
Základy Pythonu2026-07-29 · 9 min čtení

Python Error Handling: zkuste / kromě / else / konečně v roce 2026

Zpracování chyb odděluje „kód, který funguje na vašem počítači“ od „kódu, který přežije výrobu“. Pythonovské zkusit / kromě vypadá jednoduše, ale plná forma se čtyřmi klíčovými slovy — zkusit / kromě / jinak / nakonec — kóduje překvapivé množství struktury, kterou většina tutoriálů přeskakuje.

Tato příručka obsahuje: co vlastně každé klíčové slovo znamená, šest vzorů, které uvidíte v každé základní kódové základně, kdy definovat své vlastní výjimky a tři anti-vzory, díky nimž chyby proklouznou přes vaše testy.

Čtyři klíčová slova, přesně

▶ PYTHONeditable · runs in your browser

Klauzule „jinak“ je málo využívána. Říká "tento další bit závisí na úspěchu pokusu, ale nechci, aby byl chráněn stejným kromě". Je to správné místo pro šťastné pokračování cesty — vložením do try se náhodně zachytí nesouvisející výjimky z ship(result).

Šest vzorů

1. Zkuste to znovu při přechodném selhání

▶ PYTHONeditable · runs in your browser

Pravidlo: opakujte POUZE při přechodných chybách (síť, časový limit, 429, 503). Nikdy to nezkoušejte na ValueError, KeyError, TypeError – to jsou chyby v kódu a opakovaný pokus spustí chybu třikrát.

2. Chraňte se jinak

▶ PYTHONeditable · runs in your browser

else zaručuje, že soubor byl úspěšně otevřen A vyčistí rozsahy pomocí with. Upozornění: process() může vyvolat ValueError — to se rozšíří nahoru, NEBUDE zachyceno s výjimkou FileNotFoundError.

3. Vyčištění pomocí „konečně“ (předtím, než existovalo „s“)

▶ PYTHONeditable · runs in your browser

V moderním kódu byste použili s db.connect() jako conn: — with je cukr nad try / nakonec pro běžný případ čištění. Sáhněte po explicitním „konečně“ pouze v případě, že zdroj nepodporuje protokol kontextového správce.

4. Re-raise s přidaným kontextem

▶ PYTHONeditable · runs in your browser

raise NewException(...) z e zřetězí původní výjimku na novou, takže traceback ukáže OBĚ. Nikdy nepište raise NewException(str(e)) — to zahodí původní traceback.

5. Chytněte nejužší výjimku, jakou můžete

▶ PYTHONeditable · runs in your browser

Pravidlo: čím užší kromě, tím lépe. Pokud nevíte, jaký proces může vyvolat, spusťte jej a zjistěte to. s výjimkou Exception: je v 90 % případů zápach kódu.

6. raise uvnitř s výjimkou — znovu zvyšte čistě

▶ PYTHONeditable · runs in your browser

Holé raise zachovává původní traceback nedotčený. Nikdy raise e (Python 3 je na to chytrý, ale holé raise je idiomatickou formou).

Vlastní výjimky — když to stojí za to

Definujte svou vlastní třídu výjimky, když:

1. Volající musí konkrétně s výjimkou MyError: (tj. máte volatelné API a uživatelé se musí větvit podle typu selhání).

2. Vaše knihovna / služba vyvolává několik souvisejících chyb, které sdílejí kontext.

▶ PYTHONeditable · runs in your browser

Nyní mohou volající zachytit široce (s výjimkou PaymentError) nebo úzce (kromě CardDeclinedError). Strukturované atributy na výjimce (e.card_last4) umožňují obslužným rutinám chyb vytvářet užitečné uživatelské rozhraní bez analýzy zpráv o výjimkách.

Anti-pattern: definující vlastní výjimku, která existuje, aby byla vyvolána pouze jednou a nikdy nebyla zachycena. To je jen raise ValueError("..."). Vlastní výjimky získávají svou váhu tím, že jsou chyceni.

Tři anti-vzory, které skrývají chyby

Anti-vzor 1: Holé kromě

▶ PYTHONeditable · runs in your browser

Bare except zachycuje signály, které by měly ukončit program (Ctrl-C, sys.exit, MemoryError). Tohle nikdy nepiš. Pokud opravdu chcete zachytit každou nezávažnou výjimku, použijte kromě výjimky: — která STÁLE zachytí příliš mnoho, ale respektuje alespoň Ctrl-C.

Anti-vzor 2: Ztišení bez protokolování

▶ PYTHONeditable · runs in your browser

Každá zachycená výjimka by měla být buď zpracována (se specifickou rezervou), nebo by měla být zaznamenána. pass v výjimkou je chyba ve zpomaleném pohybu – zdá se, že kód funguje, zatímco tiše zahazuje data.

▶ PYTHONeditable · runs in your browser

Anti-vzor 3: kromě výjimky: kolem všeho

▶ PYTHONeditable · runs in your browser

Problém: Pokud stripe.charge uspěl, ale send_receipt selhal, zákazníkovi byla účtována částka A vy jste chybu spolkli. "Kromě" pokrývá čtyři různé režimy selhání a nemůžete je od sebe odlišit.

Oprava: zúžení zkušebního rozsahu + větvení kromě podle hranice modulu.

▶ PYTHONeditable · runs in your browser

Každý pokus zahrnuje JEDNU operaci. Každý kromě ví, co dělat s TÍMTO konkrétním selháním. To je řešení chyb na úrovni výroby.


Dobré zpracování chyb je více design než syntaxe. zkusit / kromě / jinak / nakonec vám poskytne nástroje; disciplínou je výběr správného kromě typu, nejužší možný rozsah pokusu a nikdy neumlčování chyb, kterým nerozumíte.

Další krok: Track Foundations má 10 lekcí o zpracování výjimek, vlastních výjimkách a příkazu with — se skutečným Pythonem spuštěným ve vašem prohlížeči.

Jste připraveni to vyzkoušet?

15 lekcí zdarma po bezplatné registraci – žádná karta. Vyzkoušejte platformu a pak se rozhodněte.

Začněte zdarma →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.