Natisnite Stacktrace v Pyhton Log

Natisnite Stacktrace V Pyhton Log



Zbirka pristopnih klicev v določenem trenutku je predstavljena v sledenju sklada. Ko program sproži izjemo, Python ustvari sled sklada, znano tudi kot povratna sled ali povratna sled. V tem sledenju skladov je veliko podrobnosti, ki jih je mogoče izkoristiti za odkrivanje težave. Paket beleženja Python ima več temeljnih funkcij in ima več ravni beleženja, vključno z »debug«, »info«, »warning«, »error« in »critical«.

Primer 1: Natisnite Stacktrace v Pythonu z uporabo modula Traceback

V tem primeru bomo uporabili preprost kos kode, da pokažemo, kako implementirati Pythonov modul traceback za tiskanje sledi sklada. Ta paket za povratno sledenje vključuje zelo priljubljeno funkcijo za zbiranje, shranjevanje in razstavljanje sledi skladov iz računalniških jezikov. Zvesto podvaja operacije tiskanja sledi sklada skripta. Če si boste kdaj morali ogledati sled sklada, je to nujno.

Z drugimi besedami, sled sklada prikazuje vsako operacijo, ki je bila pred tisto, ki je povzročila težavo. Najpomembnejše informacije so vedno sporočene v zadnji vrstici sledi sklada, ko je napaka identificirana. Vse klice funkcij v nastali napaki je mogoče uporabiti za hitro iskanje in rešitev težave.







Začnimo z implementacijo kode z uvozom knjižnice traceback Python. Nato v naslednji vrstici ustvarimo matriko in navedemo elemente z nekaterimi vrednostmi. Vrednosti matričnega seznama so »7«, »8«, »9«, in »10«. Na matričnem seznamu so štiri vrednosti. Ta matrični seznam je bil shranjen v predhodno inicializirani spremenljivki »A«.



Po tem uporabimo izraz 'poskusi' in vrednost 'A=6' v naslednji vrstici. Za upravljanje izjem uporabljamo bloke poskusi razen v Pythonu. Ta pristop se uporablja za pisanje skripta, ki bi lahko sprožil napako v glavi bloka. Izjeme so v bistvu napake, podobne sintaksnim napakam. Med izjemo programa je obravnava izjeme edinstveno dejanje odziva na izjemo. Če se vrnemo k skriptu, v naslednji vrstici uporabimo »razen«.



V bloku razen uporabljamo »traceback.print exc()«, kar je okrajšava za »izjema tiskanja«. Uporabljamo funkcijo »print()« znotraj polja z izjemo, ki je »konec programa«, tako da se ta stavek natisne, ko pride do izjeme. Zdaj, če pride do izjeme v poskusnem polju, se program takoj premakne v bloke razen in nadaljuje. Če do izjeme ne pride, je blok izjem v celoti preskočen. Zdaj, ko se zgodi izjema, lahko v kodi vidimo, da je bila vrednost »6« vnesena v poskusno polje, čeprav je ni na seznamu matrik. Posledično se koda takoj premakne v polje za izjeme in na izhodnem zaslonu natisne izjavo »konča se program«.





Različni klici funkcij, ki sestavljajo povratno sledenje, so razvrščeni od najnovejšega do najmanj nedavnega, od spodaj navzgor. Vse te operacije so predstavljene z dvovrstičnimi stavki. Vsak klic se začne z imenom datoteke, zaporedno številko in imenom modula, ki vse označujejo lokacijo kode. Po tem prikaže izjemni stavek za tiskanje »konec programa«, ker vrednosti »6« ni bilo na deklariranem seznamu, kar ima za posledico izpis »indeks seznama izven obsega«.



Primer 2: Natisnite Stacktrace v Pythonu z uporabo metode Logging.Exception().

V tem primeru bomo prikazali, kako uporabiti Pythonovo metodo 'logging.exception()' za izpis sledi sklada. Paket beleženja v Pythonu nam omogoča beleženje napak ter beleženje napak in izjem. Moduli za beleženje nam ponujajo izbor modulov za beleženje, vključno z »debug«, »info«, »warning«, »error« in »critical«. To so v bistvu plasti modulov za beleženje, poenostavljeno povedano. Če želite zabeležiti izjemo z napako v Pythonu, uporabite funkcijo “logging.exception()”. Ta funkcija temu zapisovalniku doda poročilo s statusom ERROR. Menijo, da so parametri namenjeni odpravljanju napak. Podatek o izjemi je priložen zapisniku. Edina lokacija, s katere lahko prikličete ta postopek, bi morali biti obdelovalci izjem.

Zdaj pa poglejmo kodo. Najprej uvozimo dve knjižnici – prva je beleženje, druga pa sledenje. Nato uporabimo metodo 'basicConfig' z 'beleženjem' in določimo raven kot 'logging.Debug'. Edini argument, ki ga sprejme metoda »getLogger()«, je »name«. Tako ga uporabljamo pri uporabi funkcije “logging.getlogger”. Če je podano ime, se ustvari sklic na primerek dnevnika s tem imenom; drugače se vrne koren. Na isti objekt zapisovalnika se sklicuje veliko operacij getLogger() z isto identiteto.

Nato uporabimo poskusiti in, kot vemo, v bloku poskusi napišemo kodo, ki lahko povzroči izjemo. V tem primeru uporabimo 'myfunction()'. Če se podana situacija ne ujema, pride do izjeme. Nato koda takoj skoči na blok razen. V tem blogu o izjemah uporabljamo »logging.info«. Znotraj napišemo sporočilo, ki ga želimo natisniti in je »izjema se je zgodila«. To je zato, ker če se zgodi izjema, preprosto pride do napake in nato prikaže to sporočilo na zaslonu. Če pa se napaka ne pojavi, prezre celotno sporočilo o izjemi.

S sporočilom smo nastavili tudi »exc info=True«. Celotna sled sklada bo vključena v beleženje, ko so informacije o exc nastavljene na True, podobno kot se zgodi z »logger.exception()«. Edina razlika je v tem, da lahko hitro preklopite raven dnevnika z napake na nekaj drugega tako, da preprosto zamenjate zapisovalnik.

Zdaj, ko je v skriptu prišlo do izjeme, je prva vrstica izpisa sporočilo »prišlo je do izjeme«, ki mu sledi raven beleženja, ki je bila uporabljena v skriptu in je »info«. Ime zapisovalca se v tem primeru pojavi kot koren. Nato se prikaže povratni klic, ki prikazuje imena modulov, vrstic in datotek. Nazadnje, sporočilo o napaki »myfunction« ni definirano.

Pogovorimo se o več kodi, ki uporablja beleženje. Metoda exception() se začne z uvozom knjižnice za beleženje. Nato sta dve spremenljivki – »m« in »n« – inicializirani in jima dodeljeni vrednosti »7« oziroma »0«. Blok poskusa je zdaj uporabljen v naslednjem koraku. Znotraj napišemo kodo, ki bi lahko povzročila izjemo. Najprej deklariramo spremenljivko 'o'. Nato nastavimo, da je 'm' deljeno z 'n'. To povzroči izjemo, ker je imenovalec enak nič in nobenega števila ne moremo deliti z nič, kar pomeni, da bodo nastale napake. Posledično koda skoči na blok razen, kjer se uporablja »logging.error«. Napaka je raven beleženja. Če pride do izjeme, natisnemo sporočilo ali izjavo, ki pravi »prišlo je do izjeme« in nastavimo »exc info=true«. Če ga ne nastavimo na true, natisne samo blok izjeme in ne prikaže informacij o sledenju.

Ker smo v našem skriptu izbrali raven »NAPAKA«, najprej prikaže koren kot ime zapisovalnika, čemur sledi sporočilo »prišlo je do izjeme«. Nato se prikažejo informacije o sledenju, ki vključujejo ime datoteke, številko vrstice in modul. Naslednja vrstica nato prikaže obvestilo o napaki, saj imenovalec ne more biti nič. In ker je imenovalec v tej kodi nič, se napaka imenuje napaka delitelja nič.

Zaključek

V tem članku smo preučili postopek tiskanja sledi sklada v dnevniku Python in kako uporabiti modul traceback za ustvarjanje sledi sklada. V prvem primeru je bila uvožena knjižnica traceback in uporabljeni sta bili metodi poskusi in razen. Koda je bila zapisana v poskusnem polju. Če pride do izjeme, hitro skoči na blok izjem in na zaslonu prikaže izjavo o izjemi. V drugem primeru smo uporabili beleženje, ki je podobno kot v prvem primeru. Metoda exception() uporablja ravni beleženja »info« in »error«. Če pride do izjeme, prikaže izjavo o izjemi.