Vytlačte Stacktrace v denníku Pyhton

Vytlacte Stacktrace V Denniku Pyhton



Kolekcia volaní prístupu v konkrétnom okamihu je reprezentovaná v stacktrace. Keď program vyvolá výnimku, Python vygeneruje stacktrace, tiež známy ako traceback alebo backtrace. V tomto stacktrace je množstvo detailov, ktoré možno využiť na lokalizáciu problému. Balík protokolovania Pythonu prichádza s niekoľkými základnými funkciami a má viacero úrovní protokolovania vrátane „ladenia“, „informácií“, „upozornenia“, „chyby“ a „kritického“.

Príklad 1: Tlač Stacktrace v Pythone s využitím modulu sledovania

V tomto príklade použijeme jednoduchý kód na demonštráciu toho, ako implementovať modul sledovania Pythonu na vytlačenie sledovania zásobníka. Tento balík sledovania obsahuje obľúbenú funkciu na zhromažďovanie, ukladanie a vystavovanie stôp zásobníka z počítačových jazykov. Verne duplikuje operácie tlače trasovania zásobníka skriptu. Ak niekedy potrebujete zobraziť stopu zásobníka, je to nevyhnutné.

Inými slovami, sledovanie zásobníka zobrazuje každú operáciu, ktorá prebehla pred operáciou, ktorá viedla k problému. Najdôležitejšie informácie sú vždy hlásené na poslednom riadku sledovania zásobníka, čiže vtedy, keď sa identifikuje chyba. Všetky volania funkcií vo výslednej chybe možno použiť na rýchle nájdenie a vyriešenie problému.







Začnime implementáciou kódu prostredníctvom importu traceback knižnice Python. Potom v nasledujúcom riadku vytvoríme pole a vypíšeme prvky s nejakými hodnotami. Hodnoty zoznamu polí sú „7“, „8“, „9“ a „10“. V zozname polí sú štyri hodnoty. Tento zoznam polí bol uložený v predtým inicializovanej premennej „A“.



Následne v nasledujúcom riadku použijeme výraz „skúsiť“ a hodnotu „A=6“. Na správu výnimiek používame bloky try-except v Pythone. Tento prístup sa používa na písanie skriptu, ktorý by mohol vyvolať chybu v hlavičke bloku. Výnimkou sú v podstate chyby, podobné syntaktickým chybám. Počas výnimky programu je spracovanie výnimiek jedinečným aktom odpovede na výnimku. Keď sa vrátime k skriptu, v ďalšom riadku použijeme „okrem“.



V bloku okrem používame „traceback.print exc()“, čo je skratka pre „printing exception“. Používame funkciu „print()“ v rámčeku výnimky, čo je „koniec programu“, aby sa tento príkaz vypísal, keď nastane výnimka. Ak sa teraz v poli pokus vyskytne výnimka, program sa okamžite presunie na bloky okrem a pokračuje. Ak sa výnimka nevyskytne, blok výnimky sa úplne preskočí. Teraz, keď nastane výnimka, v kóde vidíme, že do poľa try bola zadaná hodnota „6“, aj keď nie je v zozname polí. Výsledkom je, že kód okamžite prejde do poľa výnimky a na výstupnom displeji vytlačí vyhlásenie „koniec programu“.





Rôzne volania funkcií, ktoré tvoria spätné sledovanie, sú zoradené od najnovšieho po najaktuálnejšie, zdola nahor. Všetky tieto operácie sú reprezentované dvojriadkovými príkazmi. Každé volanie začína názvom súboru, poradovým číslom a názvom modulu, pričom všetky označujú umiestnenie kódu. Potom zobrazí vyhlásenie o výnimke „koniec programu“, pretože hodnota „6“ nebola v deklarovanom zozname, čo vedie k výstupu „index zoznamu mimo rozsahu“.



Príklad 2: Tlač Stacktrace v Pythone pomocou metódy Logging.Exception().

V tomto príklade si ukážeme, ako použiť metódu „logging.exception()“ Pythonu na výstup stacktrace. Protokolovací balík v Pythone nám umožňuje zaznamenávať chyby, ako aj zaznamenávať chyby a výnimky. Moduly protokolovania nám poskytujú výber modulov protokolovania vrátane „ladenia“, „informácií“, „varovania“, „chyby“ a „kritického“. Ide v podstate o vrstvy logovacích modulov, zjednodušene povedané. Ak chcete zaprotokolovať výnimku s chybou v Pythone, použite funkciu „logging.exception()“. Táto funkcia pridá do tohto zapisovača správu so stavom CHYBA. Predpokladá sa, že parametre sú určené na ladenie. Informácie o výnimke sú priložené k správe o protokolovaní. Jediným miestom, z ktorého možno tento postup vyvolať, by mali byť obslužné programy výnimiek.

Teraz sa pozrime na kód. Najprv importujeme dve knižnice – prvá z nich je protokolovanie a druhá je traceback. Potom použijeme metódu „basicConfig“ s „logovaním“ a špecifikujeme úroveň ako „logging.Debug“. Jediný argument, ktorý metóda „getLogger()“ používa, je „meno“. Používame ho teda pri používaní funkcie „logging.getlogger“. Ak je zadaný názov, vygeneruje sa odkaz na inštanciu zapisovača s týmto názvom; v opačnom prípade sa vráti koreň. Na rovnaký objekt zapisovača odkazuje mnoho operácií getLogger() s rovnakou identitou.

Potom použijeme na pokus a ako vieme v bloku try, napíšeme kód, ktorý môže vyvolať výnimku. V tomto prípade používame „myfunction()“. Ak sa daná situácia nezhoduje, nastáva výnimka. Potom kód okamžite preskočí na blok okrem. V tomto blogu o výnimke používame „logging.info“. Do nej napíšeme správu, ktorú chceme vytlačiť, čo je „uskutočnila sa výnimka“. Je to preto, že ak sa vyskytne výnimka, jednoducho sa vyskytne chyba a potom sa na obrazovke zobrazí táto správa. Ak sa však chyba nevyskytne, ignoruje celú správu o výnimke.

V správe sme nastavili aj „exc info=True“. Celá stacktrace bude zahrnutá do protokolovania, keď je exc info nastavené na True, podobne ako v prípade „logger.exception()“. Jediný rozdiel je v tom, že úroveň protokolu môžete rýchlo prepnúť z chyby na inú jednoduchou výmenou zapisovača.

Teraz, keď sa v skripte vyskytla výnimka, prvý riadok výstupu je správa „uskutočnila sa výnimka“, po ktorej nasleduje úroveň protokolovania, ktorá bola použitá v skripte, čiže „informácie“. V tomto prípade sa ako koreň zobrazí meno zapisovača. Potom sa zobrazí spätné volanie so zobrazením názvov modulov, riadkov a súborov. Nakoniec nie je definované chybové hlásenie „myfunction“.

Poďme sa porozprávať o nejakom ďalšom kóde, ktorý využíva protokolovanie. Metóda výnimka() začína importovaním knižnice na protokolovanie. Ďalej sa inicializujú dve premenné – „m“ a „n“ – a dostanú hodnoty „7“ a „0“. Blok try sa teraz použije v nasledujúcom kroku. V rámci neho napíšeme kód, ktorý by mohol spôsobiť výnimku. Najprv deklarujeme premennú „o“. Potom nastavíme to „m“ delené „n“. To spôsobí výnimku, pretože menovateľ je nula a žiadne číslo nemôžeme deliť nulou, čo znamená, že vzniknú chyby. V dôsledku toho kód preskočí na blok okrem, kde sa používa „logging.error“. Chyba je úroveň protokolovania. Ak dôjde k výnimke, vytlačíme správu alebo vyhlásenie s textom „došlo k výnimke“ a nastavíme „exc info=true“. Ak ho nenastavíme na hodnotu true, vytlačí sa iba blok výnimky a nezobrazia sa informácie o spätnom sledovaní.

Pretože sme v našom skripte zvolili úroveň „CHYBA“, najprv sa zobrazí koreň ako názov zapisovača, po ktorom nasleduje správa „vyskytla sa výnimka“. Potom sa zobrazia informácie o spätnom sledovaní, ktoré obsahovali názov súboru, číslo riadku a modul. Nasledujúci riadok potom zobrazuje chybové hlásenie, pretože menovateľ nemôže byť nula. A keďže v tomto kóde je menovateľ nula, chyba sa označuje ako chyba nulového deliteľa.

Záver

V tomto článku sme sa zaoberali procesom tlače stacktrace v protokole Pythonu, ako aj tým, ako použiť modul sledovania na vytvorenie sledovania zásobníka. V prvom príklade bola importovaná knižnica sledovania a boli použité metódy try and Mimo. Kód bol napísaný v poli vyskúšania. Ak sa vyskytne výnimka, rýchlo preskočí do bloku výnimky a na obrazovke zobrazí vyhlásenie o výnimke. V druhom príklade sme použili protokolovanie, ktoré je podobné prvému príkladu. Metóda výnimka() používa úrovne protokolovania „informácie“ a „chyby“. Ak sa vyskytne výnimka, zobrazí sa vyhlásenie o výnimke.