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ě
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í
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
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“)
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
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
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ě
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.
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ě
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í
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.
Anti-vzor 3: kromě výjimky: kolem všeho
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.
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.