Stacktrace nyomtatása a Pyhton Logban

Stacktrace Nyomtatasa A Pyhton Logban



Egy adott pillanatban a megközelítési hívások gyűjteménye egy veremnyomban jelenik meg. Amikor egy program kivételt állít fel, a Python egy veremkövetést generál, más néven nyomkövetést vagy visszakövetést. Ebben a veremnyomban számos részlet található, amelyek kihasználhatók a probléma megkeresésére. A Python naplózási csomag számos alapvető funkcióval rendelkezik, és több szintű naplózást tartalmaz, beleértve a „hibakeresés”, „információ”, „figyelmeztetés”, „hiba” és „kritikus” naplózást.

1. példa: Stacktrace nyomtatása Pythonban a Traceback Module használatával

Ebben a példában egy egyszerű kódrészletet fogunk használni annak bemutatására, hogyan valósítsuk meg a Python nyomkövetési modulját a veremnyomok kinyomtatásához. Ez a trackback csomag tartalmaz egy kedvelt funkciót a számítógépes nyelvek veremnyomainak összegyűjtésére, tárolására és megjelenítésére. Hűen lemásolja a szkriptek verem nyomkövetési műveleteit. Ha valaha is meg kell néznie a verem nyomát, ez elengedhetetlen.

Más szavakkal, a veremkövetés minden olyan műveletet megjelenít, amely megelőzte a problémát okozó műveletet. A legfontosabb információk mindig a veremnyomok utolsó sorában jelennek meg, amikor a hiba azonosításra kerül. Az eredményül kapott hibában szereplő összes függvényhívás felhasználható a probléma gyors megtalálására és megoldására.







Kezdjük a kód implementálásával a visszakövetési Python könyvtár importálásával. Ezután a következő sorban létrehozunk egy tömböt, és felsoroljuk az elemeket néhány értékkel. A tömblista értékei „7”, „8”, „9” és „10”. A tömblistában négy érték található. Ezt a tömblistát a korábban inicializált „A” változóba mentettük.



Ezt követően a „try” kifejezést és az „A=6” értéket használjuk a következő sorban. A kivételek kezelésére a Python try-except blokkjait használjuk. Ezzel a megközelítéssel írják meg azt a szkriptet, amely hibát okozhat a blokkfejlécben. A kivételek alapvetően a hibák, hasonlóan a szintaktikai hibákhoz. Egy program kivétele során a kivételkezelés a kivételre adott egyedi válaszlépés. Visszatérve a szkriptre, a következő sorban a „kivéve” kifejezést használjuk.



A kivétel blokkban a „traceback.print exc()”-et használjuk, ami a „nyomtatási kivétel” rövidítése. A „print()” függvényt használjuk a kivételdobozban, amely a „program vége”, így ez az utasítás a kivétel felmerülésekor kerül kinyomtatásra. Most, ha kivétel történik a try mezőben, a program azonnal a kivétel blokkokra lép, és folytatja. Ha kivétel nem történik, a kivételblokk teljesen kimarad. Most, hogy megtörténik a kivétel, láthatjuk a kódban, hogy a „6” értéket beírták a try mezőbe, bár az nem szerepel a tömblistában. Ennek eredményeként a kód azonnal a kivételdobozba kerül, és kinyomtatja a „program véget ér” utasítást a kimeneti képernyőn.





A visszakövetést alkotó különböző függvényhívások a legfrissebbtől a legfrissebbig vannak rendezve, alulról felfelé. Ezeket a műveleteket mind kétsoros utasítások képviselik. Minden hívás a fájlnévvel, a sorszámmal és a modulnévvel kezdődik, amelyek mindegyike jelzi a kód helyét. Ezt követően megjeleníti a „program vége” kivétel print utasítást, mivel a „6” érték nem szerepelt a deklarált listában, ami a „listaindex tartományon kívül” kimenetet eredményez.



2. példa: Stacktrace nyomtatása Pythonban a Logging.Exception() metódus használatával

Ebben a példában bemutatjuk, hogyan használható a Python „logging.exception()” metódusa veremkövetés kimenetére. A Python naplózási csomagja lehetővé teszi a hibák naplózását, valamint a hibák és kivételek rögzítését. A naplózó modulok naplózási modulok választékát kínálják, beleértve a „hibakeresés”, „információ”, „figyelmeztetés”, „hiba” és „kritikus”. Ezek lényegében naplózó modulok rétegei, leegyszerűsítve. A Pythonban hibás kivétel naplózásához használja a „logging.exception()” függvényt. Ez a funkció egy HIBA állapotú jelentést ad ehhez a naplózóhoz. Úgy gondolják, hogy a paraméterek hibakeresésre szolgálnak. A kivételre vonatkozó információkat a naplózási jelentéshez csatoljuk. Az egyetlen hely, ahonnan ez az eljárás meghívható, a kivételkezelők lehetnek.

Most pedig nézzük a kódot. Először két könyvtárat importálunk – az első a naplózás, a második pedig a visszakövetés. Ezután a „basicConfig” metódust használjuk a „naplózással”, és a szintet „logging.Debug”-ként adjuk meg. A „getLogger()” metódus egyetlen érve a „name”. Így a „logging.getlogger” függvény használatakor használjuk. Ha név adva van, akkor hivatkozás jön létre egy ilyen nevű naplózó példányra; ellenkező esetben a gyökér kerül visszaadásra. Ugyanarra a naplózó objektumra számos, azonos identitású getLogger() művelet hivatkozik.

Ezután megpróbáljuk, és ahogy a try blokkban tudjuk, megírjuk azt a kódot, amely kivételt okozhat. Ebben az esetben a „myfunction()”-t használjuk. Ha az adott helyzet nem egyezik, kivétel történik. Ezután a kód azonnal a kivétel blokkra ugrik. Ebben a kivételes blogban a „logging.info”-t használjuk. A belsejébe írjuk a kinyomtatni kívánt üzenetet, amely „kivétel történt”. Ennek az az oka, hogy ha kivétel történik, egyszerűen hiba történik, és ezt az üzenetet jeleníti meg a képernyőn. De ha a hiba nem jelentkezik, figyelmen kívül hagyja a teljes kivételüzenetet.

Az üzenettel az „exc info=True” értéket is beállítjuk. A teljes stacktrace szerepelni fog a naplózásban, ha az exc info True értékre van állítva, hasonlóan ahhoz, ami a „logger.exception()” esetén történik. Az egyetlen különbség az, hogy a naplózási szintet gyorsan átállíthatja a hiba helyett valami másra, pusztán a naplózó kicserélésével.

Most, hogy kivétel történt a szkriptben, a kimenet első sora a „kivétel megtörtént” üzenet, majd a szkriptben használt naplózási szint, amely az „info”. Ebben az esetben a naplózó neve gyökérként jelenik meg. Ezután megjelenik a visszakövetési hívás, amely megjeleníti a modul-, vonal- és fájlneveket. Végül a „myfunction” hibaüzenet nincs definiálva.

Beszéljünk néhány további kódról, amely a naplózást használja. Az kivétel() metódus a könyvtár importálásával kezdődik naplózáshoz. Ezután két változót – „m” és „n” – inicializálunk, és adjuk meg a „7” és „0” értéket. A következő lépésben a try blokk kerül felhasználásra. Ezen belül írjuk azt a kódot, amely kivételt okozhat. Először deklaráljuk az „o” változót. Ezután beállítjuk, hogy „m” elosztva „n”-nel. Ez kivételt okoz, mert a nevező nulla, és egyetlen számot sem tudunk nullával osztani, ami azt jelenti, hogy hibák keletkeznek. Ennek eredményeként a kód arra a kivétel blokkra ugrik, ahol a „logging.error” használatos. A hiba a naplózás szintje. Ha kivétel történik, kinyomtatunk egy üzenetet vagy utasítást, amely szerint „kivétel történt”, és beállítjuk az „exc info=true” beállítást. Ha nem állítjuk igazra, akkor csak a kivételblokkot írja ki, és nem jeleníti meg a visszakövetési információkat.

Mivel a szkriptünkben a „HIBA” szintet választottuk, először a gyökért jeleníti meg a naplózó neveként, majd a „kivétel történt” üzenetet. Ekkor megjelenik a visszakövetési információ, amely tartalmazza a fájl nevét, sorszámát és modulját. A következő sorban hibaüzenet jelenik meg, mivel a nevező nem lehet nulla. És mivel ebben a kódban a nevező nulla, a hibát nulla osztó hibának nevezik.

Következtetés

Ebben a cikkben áttekintettük a stacktrace Python-naplóban való nyomtatásának folyamatát, valamint azt, hogyan lehet a visszakövetési modult használni veremnyomok létrehozására. Az első példában a visszakövetési könyvtárat importáltuk, és a try and outside metódusokat használták. A kód a try mezőbe volt írva. Ha kivétel történik, akkor gyorsan a kivételblokkhoz ugrik, és megjeleníti a kivétel utasítást a képernyőn. A második példában az első példához hasonló naplózást használtuk. Az kivétel() metódus a naplózás „info” és „hiba” szintjét használja. Ha kivétel történik, egy kivétel utasítást jelenít meg.