Miért van szükség kivételekre?

27. fejezet: Kivételek alapjai

Kivételek (szándékos szavak lejátszása), ahogy az alábbiakban látható, a kivételkezelés Python-ban nagyon egyszerű, mivel közvetlenül a nyelvbe integrálódnak, valamint más magas szintű eszközöket is.

Egy technikai megjegyzés előtt: az első kiadása ez a könyv a kivétel volt két változás - a javaslat végül is most egy megpróbál javaslatokkal együtt, kivéve a mást, és meghatározott kivételekkel programok az enyém, most már olyan esetek, az osztályok, és nem csak a sorok. Ebben a kiadásban mind a régi, mind az új munkamódokat leírom a kivételekkel, mert a meglévő kódban gyakran találkozunk az eredeti technikákkal. Útközben elmondom, hogyan fejlődött a fejlődés ezen a területen. Az új utasítást is ismertetem, annak ellenére, hogy hivatalos megjelenése csak a Python következő kiadásában várható.

Dióhéjban a kivételek lehetővé teszik, hogy átugorjon egy tetszőleges hosszúságú program töredékét. Nézzünk egy példát egy pizza gépre, amely korábban említett ebben a könyvben. Tegyük fel, hogy komolyan vettük ezt az ötletet, és valójában egy ilyen gépet építettünk. A pizza elkészítéséhez kulináris gépünknek Python-ban írt programot kell végrehajtania: meg kell rendelnie, tésztát kell készítenie, kiegészítéseket kell készítenie, sütnie kell egy bázist stb.

Most tegyük fel, hogy valami elromlott abban az időben, amikor "az alapokat sütik". Lehet, hogy a kemence leállt, vagy talán a robotunk hibás volt a kemencében lévő távolság számításánál és meggyulladt. Nyilvánvaló, hogy gyors átmenetet kell biztosítanunk egy olyan programkódra, amely gyorsan feldolgozza az ilyen helyzeteket. Ráadásul, mivel ilyen szokatlan körülmények között nincs reményünk a pizza főzés sikeres befejezésére, teljes egészében elutasíthatnánk az egész tervet.

Pontosan ez teszi lehetővé a kivételeket: a program egy lépésben a kivételkezelőhöz léphet, és minden funkcióhívást töröl. A kivétel egyfajta "szuper goto". 1 A kivételkezelő (próbálkozás) egy címkét helyez el, és végrehajt egy programkódot. Ha ez esetben kivétel van a programban

1 Ha már használta a C nyelvet, akkor érdekel, hogy Niya kivételek Python egy kicsit hasonlít a szabványos C nyelvet egy pár funkciót setjmp / longjmp: próbálja utasítás jár a setjmp funkció, és hogyan kell emelni a használati longjmp. Csak a Python-ban, a kivételek objektumokon alapulnak, és a végrehajtási modell standard részét képezik.

Miért van szükség kivételekre?

a tolmács azonnal visszatér a címkéhez, törölve az aktív funkcióhívásokat, amelyek a címke beállítása után készültek. A kivételkezelő kódja ennek megfelelően válaszolhat (például hívja a tűzoltókat). Ezenkívül a kivételkezelőre való átmenet azonnal végrehajtásra kerül, ezért rendszerint nem szükséges ellenőrizni az egyes hívott függvények visszatérési kódjait, amelyek meghiúsulhatnak.

Kivételek hozzárendelése

A Python programokban a kivételek különböző szerepet játszhatnak. Alább vannak néhány közülük, amelyek a leginkább jellemzőek:

A tolmács kivételt emel minden alkalommal, amikor hibát észlel a programfuttatás során. A program ilyen hibákat vethet fel, feldolgozhatja azokat, vagy egyszerűen figyelmen kívül hagyhatja őket. Ha a hibát figyelmen kívül hagyja, a tolmács végrehajtja az alapértelmezett műveleteket, leállítja a program végrehajtását és hibaüzenetet jelenít meg. Ha ez az alapértelmezett viselkedés nemkívánatos, akkor hozzáadhat egy próbatesztelt, amely lehetővé teszi az észlelt hibák elhallgatását és a kísérlet utáni folytatását.

Értesítések az eseményekről

Kivételek alkalmazhatók bizonyos feltételek bejelentésére is, ami kiküszöböli az eredményláncok átvitelének szükségességét vagy kifejezetten ellenőrizni őket. Például a keresési funkció kivétel esetén kivételt hozhat, és nem eredményezhet egész számot (és reméli, hogy ez az attribútum mindig helyesen értelmezhető).

Kivételkezelés

Előfordulhat néhány olyan körülmény, amely ritkán fordul elő, hogy túlságosan pazarló lenne előirányozni az ilyen körülmények kialakulásának ellenőrzését a feldolgozás céljából. Gyakran a szokatlan helyzetek ilyen tesztjei helyettesíthetők a kivételkezelők.

Amint azt később bemutatom, a try / finally utasítás lehetővé teszi a végső műveletek végrehajtását a kivételektől függetlenül.

Szokatlan áramlásszabályozás

És végül, mivel a kivételek egyfajta "goto" operátorok, ezek a programok egzotikus áramlásszabályozásának alapjául szolgálhatnak. Például a fordított nyomkövetés nem része a nyelvnek, de megvalósítható

Kapcsolódó cikkek