Printige Stacktrace rakenduses Pyhton Log

Printige Stacktrace Rakenduses Pyhton Log



Konkreetse hetke lähenemiskutsete kogum on kujutatud virnajäljes. Kui programm teeb erandi, genereerib Python pinujälje, mida tuntakse ka kui traceback või backtrace. Selles virnajäljes on palju üksikasju, mida saab probleemi asukoha tuvastamiseks ära kasutada. Pythoni logimispakett sisaldab mitmeid põhifunktsioone ja sellel on mitu logimise taset, sealhulgas 'silumine', 'teave', 'hoiatus', 'tõrge' ja 'kriitiline'.

Näide 1: printige Pythonis Stacktrace, kasutades Tracebacki moodulit

Selles näites kasutame lihtsat koodijuppi, et näidata, kuidas rakendada Pythoni jälitusmoodulit virnajälje printimiseks. See trackbacki pakett sisaldab populaarset funktsiooni arvutikeelte virnajälgede kogumiseks, salvestamiseks ja eksponeerimiseks. See dubleerib tõetruult skripti virnajälje printimistoiminguid. Kui teil on kunagi vaja näha virna jälge, on see hädavajalik.

Teisisõnu kuvab virnajälg iga toimingu, mis toimus enne seda, mis probleemi põhjustas. Kõige olulisem teave edastatakse alati virnajälje viimasel real, mis on siis, kui viga tuvastatakse. Probleemi kiireks leidmiseks ja lahendamiseks saab kasutada kõiki tekkinud vea funktsioonikutseid.







Alustame koodi juurutamisega Pythoni teegi jälgimise kaudu. Seejärel loome järgmisel real massiivi ja loetleme elemendid teatud väärtustega. Massiiviloendi väärtused on '7', '8', '9' ja '10'. Massiiviloendis on neli väärtust. See massiiviloend salvestati varem lähtestatud muutujasse “A”.



Pärast seda kasutame järgmisel real terminit 'proovige' ja väärtust 'A=6'. Erandite haldamiseks kasutame Pythonis proovi-välja arvatud plokke. Seda lähenemisviisi kasutatakse skripti kirjutamiseks, mis võib põhjustada ploki päises vea. Erandid on sisuliselt vead, sarnased süntaksivigadele. Programmi erandi ajal on erandi käsitlemine erandile reageerimise ainulaadne toiming. Naastes skripti juurde, kasutame järgmisel real 'välja arvatud'.



Välja arvatud plokis kasutame 'traceback.print exc()', mis on lühend sõnadest 'printimise erand'. Kasutame erandikasti sees funktsiooni 'print()', mis on 'programmi lõpp', nii et see avaldus prinditakse erandi ilmnemisel. Nüüd, kui proovikastis ilmneb erand, liigub programm kohe välja arvatud plokkidesse ja jätkab. Kui erandit ei toimu, jäetakse erandiplokk täielikult vahele. Nüüd, kui erand juhtub, näeme koodis, et proovikasti sisestati väärtus „6”, kuigi seda pole massiiviloendis. Selle tulemusena läheb kood kohe erandikasti ja prindib väljundkuvale lause „programm lõpeb”.





Erinevad funktsioonikutsed, mis moodustavad jälgimise, järjestatakse kõige uuemast kuni kõige hiljutisemani, alt üles. Kõik need toimingud on esitatud kaherealiste lausetega. Iga kõne algab failinime, järjenumbri ja mooduli nimega, mis kõik näitavad koodi asukohta. Pärast seda kuvab see erandi prindilause „programmi lõpp”, kuna väärtust „6” deklareeritud loendis ei olnud, mille tulemuseks on väljund „loendiindeks vahemikust väljas”.



Näide 2: printige Pythonis Stacktrace, kasutades meetodit Logging.Exception()

Selles näites näitame, kuidas kasutada Pythoni meetodit 'logging.exception()' virnajälje väljastamiseks. Pythoni logimispakett võimaldab meil nii vigu logida kui ka vigu ja erandeid salvestada. Logimismoodulid annavad meile valiku logimismooduleid, sealhulgas „silumine“, „teave“, „hoiatus“, „tõrge“ ja „kriitiline“. Need on sisuliselt logimismoodulite kihid, lihtsalt öeldes. Pythonis veaga erandi logimiseks kasutage funktsiooni 'logging.exception()'. See funktsioon lisab sellele logijale aruande olekuga ERROR. Arvatakse, et parameetrid on mõeldud silumiseks. Teave erandi kohta on lisatud raiearuandele. Ainus koht, kust seda protseduuri käivitada, peaks olema erandite töötlejad.

Vaatame nüüd koodi. Esiteks impordime kaks teeki – esimene neist on logimine ja teine ​​​​jälgimine. Seejärel kasutame 'logimisega' meetodit 'basicConfig' ja määrame tasemeks 'logging.Debug'. Ainus argument, mida meetod 'getLogger()' kasutab, on 'nimi'. Seega kasutame seda funktsiooni „logging.getlogger” kasutamisel. Kui on antud nimi, genereeritakse viide selle nimega logija eksemplarile; vastasel juhul tagastatakse juur. Sama logijaobjekti viitavad paljud sama identiteediga getLogger() operatsioonid.

Seejärel kasutame proovimist ja nagu me prooviplokis teame, kirjutame koodi, mis võib tekitada erandi. Sel juhul kasutame funktsiooni 'myfunction()'. Kui antud olukord ei sobi, tekib erand. Seejärel hüppab kood kohe välja arvatud plokki. Selles erandiblogis kasutame faili logging.info. Selle sisse kirjutame sõnumi, mille tahame printida ja mis on 'toimus erand'. Selle põhjuseks on asjaolu, et kui erand juhtub, tekib lihtsalt tõrge ja kuvatakse see teade ekraanil. Kuid kui viga ei ilmne, ignoreerib see kogu eranditeadet.

Samuti määrasime sõnumiga 'exc info=True'. Kogu virnajälg kaasatakse logimisse, kui exc info on seatud väärtusele Tõene, sarnaselt sellele, mis juhtub failiga 'logger.exception()'. Ainus erinevus seisneb selles, et logitaseme saab kiiresti tõrketasemelt millegi muu vastu vahetada, lihtsalt logija välja vahetades.

Nüüd, kui skriptis ilmnes erand, on väljundi esimene rida teade „Erand toimus”, millele järgneb skriptis kasutatud logimistase, mis on „teave”. Logija nimi kuvatakse sel juhul juurena. Seejärel kuvatakse jälituskõne, mis kuvab mooduli, rea ja failinimed. Lõpuks pole tõrketeadet 'minufunktsioon' määratletud.

Räägime veel mõnest koodist, mis kasutab logimist. Erand() meetod algab teegi importimisega logimiseks. Järgmisena lähtestatakse kaks muutujat – “m” ja “n” – ning neile antakse vastavalt väärtused “7” ja “0”. Prooviplokki kasutatakse nüüd järgmises etapis. Sellesse kirjutame koodi, mis võib põhjustada erandi. Esiteks deklareerime muutuja 'o'. Seejärel määrame selle 'm' jagatud 'n'-ga. See põhjustab erandi, kuna nimetaja on null ja me ei saa ühtegi arvu nulliga jagada, mis tähendab, et vead tekivad. Selle tulemusena hüppab kood välja arvatud plokki, kus kasutatakse 'logging.error'. Viga on logimise tase. Kui ilmneb erand, prindime sõnumi või avalduse, mis ütleb „erand toimus” ja määrame „exc info=true”. Kui me ei määra seda tõeseks, prindib see ainult erandiploki ja ei kuva jälgimise teavet.

Kuna valisime oma skriptis taseme 'VIGA', kuvatakse logija nimena esmalt juur, millele järgneb teade 'Erand juhtus'. Seejärel kuvatakse jälgimisteave, mis sisaldas faili nime, rea numbrit ja moodulit. Järgmisel real kuvatakse veateade, kuna nimetaja ei saa olla null. Ja kuna selles koodis on nimetaja null, nimetatakse viga nulljagaja veaks.

Järeldus

Selles artiklis vaatlesime Pythoni logis virnajälje printimise protsessi ja seda, kuidas kasutada virnajälje loomiseks tracebacki moodulit. Esimeses näites imporditi jälgimise teek ja kasutati proovi ja väljajätmise meetodeid. Kood kirjutati proovikasti. Kui ilmneb erand, hüppab see kiiresti erandiplokki ja kuvab ekraanil erandi avalduse. Teises näites kasutasime logimist, mis sarnaneb esimese näitega. Erand() meetod kasutab logimise 'teabe' ja 'vea' tasemeid. Kui ilmneb erand, kuvab see erandilause.