Prejsť na hlavný obsah
Základy jazyka Python2026-07-29 · 9 min čítania

Python Error Handling: skúste / okrem / else / konečne v roku 2026

Spracovanie chýb oddeľuje „kód, ktorý funguje na vašom počítači“ od „kódu, ktorý prežije výrobu“. Pythonovské „skús / okrem“ vyzerá jednoducho, ale plná forma so štyrmi kľúčovými slovami – „skúsiť / okrem / inak / konečne“ – zakóduje prekvapivé množstvo štruktúry, ktorú väčšina tutoriálov preskočí.

Táto príručka obsahuje: čo vlastne každé kľúčové slovo znamená, šesť vzorov, ktoré uvidíte v každej základnej kódovej základni, kedy definovať svoje vlastné výnimky a tri anti-vzory, vďaka ktorým sa chyby dostanú cez vaše testy.

Presne štyri kľúčové slová

▶ PYTHONeditable · runs in your browser

Klauzula „ostatné“ sa používa nedostatočne. Hovorí sa, že "tento ďalší bit závisí od úspechu pokusu, ale nechcem, aby bol chránený tým istým okrem". Je to správne miesto pre pokračovanie šťastnej cesty — vloženie do try náhodne zachytí nesúvisiace výnimky z ship(result).

Šesť vzorov

1. Skúste znova pri prechodnom zlyhaní

▶ PYTHONeditable · runs in your browser

Pravidlo: Skúste to znova LEN pri prechodných chybách (sieť, časový limit, 429, 503). Nikdy to neskúšajte na ValueError, KeyError, TypeError – to sú chyby v kóde a opätovným pokusom sa chyba spustí trikrát.

2. Strážte pomocou „inak“.

▶ PYTHONeditable · runs in your browser

Else zaručuje, že súbor bol úspešne otvorený A vyčistenie rozsahov pomocou with. Upozornenie: process() môže vyvolať ValueError — ktorý sa rozšíri a NEZAchytí ho okrem FileNotFoundError.

3. Vyčistenie pomocou „konečne“ (predtým, než existoval „s“)

▶ PYTHONeditable · runs in your browser

V modernom kóde by ste použili s db.connect() ako conn: — with je cukor nad try / konečne pre bežný prípad čistenia. Explicitné „konečne“ siahnite iba vtedy, keď zdroj nepodporuje protokol kontextového manažéra.

4. Znova zvýšiť s pridaným kontextom

▶ PYTHONeditable · runs in your browser

raise NewException(...) z e zreťazí pôvodnú výnimku na novú, takže spätné sledovanie ukazuje OBOJE. Nikdy nepíšte raise NewException(str(e)) — tým sa zahodí pôvodné sledovanie.

5. Chyť najužšiu výnimku, akú môžeš

▶ PYTHONeditable · runs in your browser

Pravidlo: čím užšia výnimka, tým lepšie. Ak neviete, aký proces môže vyvolať, spustite ho a zistite to. okrem výnimky: je v 90 % prípadov zápach kódu.

6. navýšiť vnútri okrem — znovu navýšiť čisto

▶ PYTHONeditable · runs in your browser

Holé raise zachováva pôvodný traceback nedotknutý. Nikdy „nezvyšuj e“ (Python 3 je na to múdry, ale holé „zvyšovanie“ je idiomatická forma).

Vlastné výnimky — keď to stojí za to

Definujte svoju vlastnú triedu výnimky, keď:

1. Volajúci musia okrem MyError: špecificky (t. j. máte volateľné API a používatelia sa musia vetviť podľa typu zlyhania).

2. Vaša knižnica/služba vyvoláva viacero súvisiacich chýb, ktoré zdieľajú kontext.

▶ PYTHONeditable · runs in your browser

Teraz môžu volajúci zachytiť široko (okrem PaymentError) alebo úzko (okrem CardDeclinedError). Štruktúrované atribúty na výnimke (e.card_last4) umožňujú obslužným programom chýb vytvárať užitočné UX bez analýzy správ o výnimkách.

Anti-pattern: definujúce vlastnú výnimku, ktorá existuje len na to, aby bola vyvolaná raz a nikdy sa nezachytí. To je len `raise ValueError("...")". Vlastné výnimky získavajú svoju váhu prichytením.

Tri anti-vzory, ktoré skrývajú chyby

Anti-vzor 1: Holé okrem

▶ PYTHONeditable · runs in your browser

Bare s výnimkou zachytáva signály, ktoré by mali ukončiť program (Ctrl-C, sys.exit, MemoryError). Toto nikdy nepíšte. Ak naozaj chcete zachytiť každú nezávažnú výnimku, použite okrem výnimky: — ktorá STÁLE zachytí príliš veľa, ale rešpektuje aspoň Ctrl-C.

Anti-vzor 2: Stíšenie bez protokolovania

▶ PYTHONeditable · runs in your browser

Každá zachytená výnimka by sa mala buď spracovať (so špecifickou rezervou) alebo zaprotokolovať. pass vo výnimke je chyba v spomalenom zábere – zdá sa, že kód funguje pri tichom vyhadzovaní údajov.

▶ PYTHONeditable · runs in your browser

Anti-vzor 3: okrem výnimky: okolo všetkého

▶ PYTHONeditable · runs in your browser

Problém: ak stripe.charge uspel, ale send_receipt zlyhal, zákazníkovi boli účtované poplatky A vy ste chybu prehltli. „Okrem“ zahŕňa štyri rôzne režimy zlyhania a nemôžete ich od seba odlíšiť.

Oprava: zúženie skúšobného rozsahu + vetvenie okrem podľa hranice modulu.

▶ PYTHONeditable · runs in your browser

Každý pokus zahŕňa JEDNU operáciu. Každý okrem vie, čo robiť s TÝMTO konkrétnym zlyhaním. To je spracovanie chýb na úrovni výroby.


Dobré spracovanie chýb je viac dizajn ako syntax. vyskúšať / okrem / else / nakoniec vám poskytne nástroje; disciplína je výber správneho okrem typu, najužší možný rozsah pokusov a nikdy neumlčovanie chýb, ktorým nerozumiete.

Ďalší krok: Track Foundations má 10 lekcií o spracovaní výnimiek, vlastných výnimkách a príkazu „with“ – so skutočným Pythonom spusteným vo vašom prehliadači.

Chcete to vyskúšať?

15 lekcií zdarma po bezplatnej registrácii – žiadna karta. Otestujte platformu a potom sa rozhodnite.

Začnite zadarmo →

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.