Ugrás a fő tartalomra
Python alapjai2026-07-29 · 9 perc olvasás

Python hibakezelés: próbálja meg / kivéve / else / végre 2026-ban

A hibakezelés elválasztja a „gépen működő kódot” a „gyártást túlélő kódtól”-tól. A Python try / kivéve egyszerűnek tűnik, de a négy kulcsszóból álló teljes forma – `try / kivéve / else / Végül – meglepően sok struktúrát kódol, amelyet a legtöbb oktatóanyag kihagy.

Ez az útmutató a következőket tárgyalja: mit jelentenek az egyes kulcsszavak, a hat mintát, amelyeket minden háttérkódbázisban látni fog, mikor kell meghatározni a saját kivételeket, és a három anti-mintázatot, amelyek segítségével a hibák átcsúszhatnak a teszteken.

Pontosan a négy kulcsszó

▶ PYTHONeditable · runs in your browser

Az "else" záradékot nem használják fel. Azt írja ki, hogy "a következő lépés a próbálkozás sikerességétől függ, de nem akarom, hogy ugyanazzal védje, kivéve". Ez a megfelelő hely a boldog út folytatásához – a „try” szóba helyezve véletlenül a „hajó(eredmény)” nem kapcsolódó kivételeket kapja.

A hat minta

1. Próbálja újra átmeneti hiba esetén

▶ PYTHONeditable · runs in your browser

Szabály: CSAK tranziens hibák esetén próbálkozzon újra (hálózat, időtúllépés, 429, 503). Soha ne próbálja újra a "ValueError", "KeyError", "TypeError" hibákat – ezek kódhibák, és az újrapróbálkozás csak háromszor futtatja a hibát.

2. Őrizd a mást

▶ PYTHONeditable · runs in your browser

Az „else” garantálja, hogy a „file” sikeresen megnyílt, ÉS a „with” paraméterrel kiterjed a tisztítást. Figyelmeztetés: a process() ValueError-t okozhat – ez továbbterjed, és NEM fogja elkapni a kivéve FileNotFoundError.

3. Tisztítás a "végre" kifejezéssel (mielőtt a "with" létezett)

▶ PYTHONeditable · runs in your browser

A modern kódban a with db.connect()-t használnád conn:-ként – a with' a `try / Végül' cukrot jelenti az általános tisztítási esethez. Csak akkor érje el az explicit "végre" kifejezést, ha az erőforrás nem támogatja a környezetkezelő protokollt.

4. Újraemelés hozzáadott kontextussal

▶ PYTHONeditable · runs in your browser

A raise NewException(...) from e az eredeti kivételt az újba láncolja, így a visszakövetés MINDENKÉT mutat. Soha ne írja be a "raise NewException(str(e))" szót – ez elveti az eredeti visszakövetést.

5. Fogja meg a lehető legszűkebb kivételt

▶ PYTHONeditable · runs in your browser

Szabály: minél szűkebb a kivétel, annál jobb. Ha nem tudja, hogy mit emelhet ki a process, futtassa le, és derítse ki. kivéve kivétel: az esetek 90%-ában kódszag.

6. emelés belül kivéve — tisztán újraemelni

▶ PYTHONeditable · runs in your browser

A csupasz "emelés" érintetlenül tartja az eredeti nyomkövetést. Soha ne emeld fel az e-t (a Python 3 okos hozzá, de a csupasz 'emelés' az idiomatikus forma).

Egyéni kivételek – amikor megéri

Határozza meg saját kivételosztályát, amikor:

1. A hívóknak konkrétan "kivéve a MyError:"-t (vagyis hívható API-val kell rendelkezniük, és a felhasználóknak a hiba típusa szerint kell elágazniuk).

2. Könyvtára/szolgáltatása több kapcsolódó hibát is felvet, amelyek megosztják a kontextust.

▶ PYTHONeditable · runs in your browser

Mostantól a hívók széles körben ("kivéve PaymentError") vagy szűken ("CardDeclinedError kivételével") elkaphatják. A kivétel strukturált attribútumai (e.card_last4) lehetővé teszik a hibakezelők számára, hogy a kivételüzenetek elemzése nélkül hasznos felhasználói élményt építsenek fel.

Anti-minta: egyéni kivétel meghatározása, amely csak egyszer létezik, és soha nem fogható. Ez csak „ValueError("...") emelése. Az egyéni kivételek az elkapott súlyt kapják.

Három anti-minta, amelyek elrejtik a hibákat

Anti-minta 1: Csupasz, kivéve

▶ PYTHONeditable · runs in your browser

A csupasz kivéve elkapja azokat a jeleket, amelyeknek ki kell lépniük a programból (Ctrl-C, sys.exit, MemoryError). Soha ne írd ezt. Ha valóban minden nem végzetes kivételt szeretne elkapni, használja az except Exception: -t, amely MÉG túl sokat fog, de legalább tiszteletben tartja a Ctrl-C billentyűkombinációt.

Anti-minta 2: Elnémítás naplózás nélkül

▶ PYTHONeditable · runs in your browser

Minden elkapott kivételt vagy kezelni kell (egy adott tartalékkal), vagy naplózni kell. Az "pass" az kivételben egy hiba lassított felvételnél – úgy tűnik, hogy a kód működik, miközben csendben eldobja az adatokat.

▶ PYTHONeditable · runs in your browser

3. anti-minta: kivéve Kivétel: minden körül

▶ PYTHONeditable · runs in your browser

Probléma: ha a stripe.charge sikeres volt, de a send_receipt sikertelen, akkor az ügyfélnek díjat kell fizetnie, ÉS Ön lenyelte a hibát. A „kivéve” négy különböző hibamódot takar, és nem lehet őket megkülönböztetni.

Javítás: szűkítse a try hatókörét + elágazza a kivételt modulhatár szerint.

▶ PYTHONeditable · runs in your browser

Minden próbálkozás EGY műveletet takar. Mindegyik, kivéve, tudja, mit kell tenni EZZEL a konkrét kudarccal. Ez a gyártási szintű hibakezelés.


A jó hibakezelés inkább tervezés, mint szintaxis. A `try / kivéve / else / végül' megadja az eszközöket; a fegyelem a megfelelő kiválasztása a típus kivételével, a lehető legszűkebb próbálkozási hatókör, és soha nem hallgatja el azokat a hibákat, amelyeket nem ért.

Következő lépés: a Foundations track 10 leckét tartalmaz a kivételkezelésről, az egyéni kivételekről és a "with" utasításról – valódi Python futtatásával a böngészőben.

Készen áll a kipróbálására?

Ingyenes 15 óra ingyenes regisztráció után – kártya nélkül. Kísérje ki a platformot, majd döntse el.

Kezdje ingyen →

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.