Preskoči na glavni sadržaj
Osnove Pythona2026-07-29 · 9 min čitanja

Rukovanje pogreškama u Pythonu: pokušaj / osim / inače / konačno u 2026

Rukovanje pogreškama odvaja "kod koji radi na vašem stroju" od "koda koji preživljava proizvodnju". Pythonov pokušaj / osim izgleda jednostavno, ali puni oblik od četiri ključne riječi — pokušaj / osim / inače / konačno — kodira iznenađujuću količinu strukture koju većina tutorijala preskače.

Ovaj vodič pokriva: što svaka ključna riječ zapravo znači, šest uzoraka koje ćete vidjeti u svakoj pozadinskoj bazi koda, kada definirati vlastite iznimke i tri anti-obrasca koji dopuštaju bugovima da prođu pored vaših testova.

Točno četiri ključne riječi

▶ PYTHONeditable · runs in your browser

Klauzula "else" se premalo koristi. Kaže "ovaj sljedeći dio ovisi o uspjehu pokušaja, ali ne želim da bude zaštićen istim osim". To je pravo mjesto za nastavak sretnog puta — stavljanje unutar pokušati slučajno hvata nepovezane iznimke iz ship(result).

Šest uzoraka

1. Pokušaj ponovno u slučaju prolaznog kvara

▶ PYTHONeditable · runs in your browser

Pravilo: pokušajte ponovno SAMO na prolaznim pogreškama (mreža, vremensko ograničenje, 429, 503). Nikada ne pokušavajte ponovo na ValueError, KeyError, TypeError — to su greške koda, a ponovni pokušaj samo pokreće pogrešku tri puta.

2. Zaštitite s else

▶ PYTHONeditable · runs in your browser

else jamči da je datoteka uspješno otvorena I obuhvaća čišćenje opsega pomoću with. Napomena: process() može pokrenuti ValueError — to će se proširiti prema gore, NEĆE ga uhvatiti osim FileNotFoundError.

3. Čišćenje pomoću "konačno" (prije nego što je postojao "sa")

▶ PYTHONeditable · runs in your browser

U modernom kodu upotrijebili biste with db.connect() kao conn: — with je šećer nad try / finally za uobičajeni slučaj čišćenja. Posegnite za eksplicitnim "konačno" samo kada resurs ne podržava protokol upravitelja konteksta.

4. Ponovno podizanje s dodanim kontekstom

▶ PYTHONeditable · runs in your browser

raise NewException(...) from e ulančava izvornu iznimku na novu tako da povratno praćenje prikazuje OBA. Nikada nemojte pisati raise NewException(str(e)) — to odbacuje izvorno praćenje.

5. Uhvatite najužu iznimku koju možete

▶ PYTHONeditable · runs in your browser

Pravilo: što je izuzetak uži, to bolje. Ako ne znate što proces može pokrenuti, pokrenite ga i saznajte. osim iznimke: je šifrirani miris 90% vremena.

6. raise unutar except — čisto ponovno podizanje

▶ PYTHONeditable · runs in your browser

Bare raise zadržava izvorno praćenje netaknutim. Nikada nemojte raise e (Python 3 je pametan u vezi s tim, ali golo raise je idiomatski oblik).

Prilagođene iznimke — kada se isplati

Definirajte vlastitu klasu izuzetaka kada:

1. Pozivatelji trebaju posebno osim MyError: (tj. imate API koji se može pozivati i korisnici se moraju granati prema vrsti greške).

2. Vaša biblioteka/usluga javlja višestruke povezane pogreške koje dijele kontekst.

▶ PYTHONeditable · runs in your browser

Sada pozivatelji mogu uhvatiti široko (osim PaymentError) ili usko (osim CardDeclinedError). Strukturirani atributi na iznimci (e.card_last4) omogućuju rukovateljima pogreškama izgradnju korisnog korisničkog sučelja bez analiziranja poruka o iznimkama.

Anti-uzorak: definiranje prilagođene iznimke koja postoji samo da bi se pokrenula jednom i nikada nije uhvaćena. To je samo raise ValueError("..."). Prilagođene iznimke dobivaju svoju težinu time što su uhvaćene.

Tri anti-uzorka koji skrivaju greške

Anti-uzorak 1: Golo osim

▶ PYTHONeditable · runs in your browser

Goli except hvata signale koji bi trebali izaći iz programa (Ctrl-C, sys.exit, MemoryError). Nikad ovo nemoj napisati. Ako doista želite uhvatiti svaku nefatalnu iznimku, koristite except Exception: — koja IPAK hvata previše, ali barem poštuje Ctrl-C.

Anti-uzorak 2: Utišavanje bez zapisivanja

▶ PYTHONeditable · runs in your browser

Svaku uhvaćenu iznimku treba ili obraditi (s određenim zamjenskim rješenjem) ili zabilježiti. pass u osim je bug u usporenom snimku — čini se da kôd radi dok tiho odbacuje podatke.

▶ PYTHONeditable · runs in your browser

Anti-uzorak 3: osim iznimke: oko svega

▶ PYTHONeditable · runs in your browser

Problem: ako je stripe.charge uspio, ali send_receipt nije uspio, kupcu je naplaćeno I vi ste progutali pogrešku. Osim pokriva četiri različita načina kvara i ne možete ih razlikovati.

Popravak: suzite opseg pokušaja + granajte osim po granici modula.

▶ PYTHONeditable · runs in your browser

Svaki pokušaj pokriva JEDNU operaciju. Svaki osim zna što učiniti u vezi OVOG specifičnog kvara. To je rukovanje pogreškama proizvodne razine.


Dobro rukovanje pogreškama je više dizajn nego sintaksa. pokušaj / osim / inače / konačno daje vam alate; disciplina je odabir pravog osim tipa, najuži mogući opseg pokušaja i nikad prešućivanje pogrešaka koje ne razumijete.

Sljedeći korak: Traka temelja ima 10 lekcija o rukovanju iznimkama, prilagođenim iznimkama i naredbi with — sa pravim Pythonom koji radi u vašem pregledniku.

Jeste li spremni isprobati?

15 besplatne lekcije nakon besplatne prijave — bez kartice. Isprobajte platformu, a zatim odlučite.

Počni besplatno →

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.