Tulosta Stacktrace Pyhton Logissa

Tulosta Stacktrace Pyhton Logissa



Joukko lähestymiskutsuja tietyllä hetkellä on esitetty pinojäljessä. Kun ohjelma herättää poikkeuksen, Python luo pinojäljityksen, joka tunnetaan myös nimellä traceback tai backtrace. Tässä pinojäljessä on useita yksityiskohtia, joita voidaan hyödyntää ongelman paikantamiseksi. Python-lokipaketti sisältää useita perusominaisuuksia, ja siinä on useita kirjaustasoja, mukaan lukien 'debug', 'info', 'warning', 'error' ja 'critical'.

Esimerkki 1: Tulosta Stacktrace Pythonissa käyttämällä Traceback-moduulia

Tässä esimerkissä käytämme yksinkertaista koodinpätkää osoittamaan, kuinka Pythonin jäljitysmoduuli voidaan toteuttaa pinojäljen tulostamiseen. Tämä trackback-paketti sisältää hyvin pidetyn ominaisuuden pinojälkien keräämiseen, tallentamiseen ja esittelyyn tietokonekielistä. Se kopioi uskollisesti skriptin pinojäljityksen tulostustoiminnot. Jos haluat nähdä pinojäljen, se on välttämätöntä.

Toisin sanoen pinojäljitys näyttää jokaisen toiminnon, joka suoritettiin ennen ongelmaa aiheuttavaa toimenpidettä. Tärkeimmät tiedot raportoidaan aina pinojäljen viimeisellä rivillä, jolloin vika tunnistetaan. Kaikkia tuloksena olevan virheen funktiokutsuja voidaan käyttää ongelman nopeaan paikallistamiseen ja ratkaisemiseen.







Aloitetaan ottamalla koodi käyttöön tuomalla Python-seurantakirjasto. Seuraavalla rivillä luomme taulukon ja luettelemme elementit joillakin arvoilla. Taulukkoluettelon arvot ovat '7', '8', '9' ja '10'. Taulukkoluettelossa on neljä arvoa. Tämä taulukkoluettelo on tallennettu aiemmin alustettuun muuttujaan 'A'.



Tämän jälkeen käytämme termiä 'try' ja arvoa 'A=6' seuraavalla rivillä. Käytämme Pythonissa try-except-lohkoja poikkeuksien hallintaan. Tätä lähestymistapaa käytetään skriptin kirjoittamiseen, joka voi aiheuttaa virheen lohkon otsikossa. Poikkeukset ovat pohjimmiltaan virheitä, samanlaisia ​​kuin syntaksivirheet. Ohjelman poikkeuksen aikana poikkeusten käsittely on ainutlaatuinen tapa reagoida poikkeukseen. Palataksemme käsikirjoitukseen, käytämme seuraavalla rivillä 'paitsi'.



Poikkeuslohkossa käytämme 'traceback.print exc()', joka on lyhenne sanoista 'tulostuspoikkeus'. Käytämme 'print()'-funktiota poikkeuslaatikon sisällä, joka on 'ohjelman loppu', jotta tämä lauseke tulostuu, kun poikkeus syntyy. Nyt, jos try-ruudussa tapahtuu poikkeus, ohjelma siirtyy välittömästi poikkeuslohkoihin ja jatkaa. Jos poikkeusta ei tapahdu, poikkeuslohko ohitetaan kokonaan. Nyt kun poikkeus tapahtuu, voimme nähdä koodissa, että arvo '6' on syötetty try-kenttään, vaikka se ei ole taulukkoluettelossa. Tämän seurauksena koodi siirtyy välittömästi poikkeusruutuun ja tulostaa 'ohjelma päättyy' -lausekkeen tulosnäytölle.





Tracebackin muodostavat eri funktiokutsut järjestetään viimeisimmästä viimeisimpään, alhaalta ylös. Kaikki nämä toiminnot esitetään kaksirivisilla lauseilla. Jokainen puhelu alkaa tiedoston nimellä, järjestysnumerolla ja moduulin nimellä, jotka kaikki osoittavat koodin sijainnin. Sen jälkeen se näyttää poikkeustulostuskäskyn 'ohjelman loppu', koska arvo '6' ei ollut ilmoitetussa luettelossa, mikä johtaa 'luetteloindeksin alueen ulkopuolella' -tulostukseen.



Esimerkki 2: Tulosta Stacktrace Pythonissa käyttämällä Logging.Exception() -menetelmää

Tässä esimerkissä näytämme, kuinka Pythonin 'logging.exception()'-menetelmää käytetään pinojäljen tulostamiseen. Pythonin lokipaketti antaa meille mahdollisuuden kirjata virheet sekä tallentaa virheet ja poikkeukset. Lokimoduulit tarjoavat meille valikoiman lokimoduuleja, mukaan lukien 'debug', 'info', 'varoitus', 'virhe' ja 'kriittinen'. Nämä ovat pohjimmiltaan kerroksia kirjausmoduuleja, yksinkertaisesti sanottuna. Jos haluat kirjata poikkeuksen, jossa on virhe Pythonissa, käytä logging.exception()-funktiota. Tämä toiminto lisää tähän loggeriin raportin, jossa on VIRHE-tila. Parametrien uskotaan olevan virheenkorjausta varten. Tiedot poikkeuksesta ovat hakkuuraportin liitteenä. Ainoa sijainti, josta tämä menettely voidaan käynnistää, on poikkeuskäsittelijät.

Katsotaan nyt koodia. Ensin tuomme kaksi kirjastoa – joista ensimmäinen on kirjaaminen ja toinen jäljitys. Sitten käytämme 'basicConfig'-menetelmää 'logging' kanssa ja määritämme tasoksi 'logging.Debug'. Ainoa argumentti, jonka 'getLogger()'-menetelmä käyttää, on 'nimi'. Siksi käytämme sitä käytettäessä 'logging.getlogger'-toimintoa. Jos nimi annetaan, luodaan viittaus samannimiseen loggerin ilmentymään; muussa tapauksessa juuri palautetaan. Useat getLogger()-operaatiot viittaavat samaan logger-objektiin samalla identiteetillä.

Sitten yritämme, ja kuten tiedämme try-lohkossa, kirjoitamme koodin, joka saattaa aiheuttaa poikkeuksen. Tässä tapauksessa käytämme 'myfunction()'. Jos annettu tilanne ei täsmää, tapahtuu poikkeus. Sitten koodi hyppää välittömästi poikkeuslohkoon. Tässä poikkeusblogissa käytämme logging.infoa. Sen sisään kirjoitamme viestin, jonka haluamme tulostaa ja joka on 'poikkeus tapahtui'. Tämä johtuu siitä, että jos poikkeus tapahtuu, tapahtuu vain virhe, jolloin se näyttää tämän viestin näytöllä. Mutta jos virhettä ei tapahdu, se ohittaa koko poikkeusviestin.

Asetamme viestin kanssa myös 'exc info=True'. Koko pinojälki sisällytetään lokiin, kun exc-tiedot on asetettu arvoon True, samalla tavalla kuin 'logger.exception()'-toiminnolla. Ainoa ero on, että voit nopeasti vaihtaa lokitason virheestä johonkin muuhun vain vaihtamalla loggerin.

Nyt kun komentosarjassa tapahtui poikkeus, tulosteen ensimmäinen rivi on 'poikkeus tapahtui' -viesti, jota seuraa skriptissä käytetty kirjaustaso, joka on 'info'. Loggerin nimi näkyy juurina tässä tapauksessa. Sitten näkyviin tulee jäljityskutsu, joka näyttää moduulin, rivin ja tiedostojen nimet. Lopuksi virheilmoitusta 'myfunction' ei ole määritelty.

Puhutaanpa lisää koodista, joka käyttää kirjaamista. Poikkeus()-menetelmä alkaa tuomalla kirjasto kirjaamista varten. Seuraavaksi kaksi muuttujaa - 'm' ja 'n' - alustetaan ja niille annetaan arvot '7' ja '0'. Yritä-lohkoa käytetään nyt seuraavassa vaiheessa. Sen sisään kirjoitamme koodin, joka voi aiheuttaa poikkeuksen. Ensin julistetaan muuttuja 'o'. Sitten asetamme sen 'm' jaettuna 'n'. Tämä aiheuttaa poikkeuksen, koska nimittäjä on nolla emmekä voi jakaa mitään lukua nollalla, mikä tarkoittaa, että virheitä syntyy. Tämän seurauksena koodi hyppää poikkeuslohkoon, jossa käytetään 'logging.error'. Virhe on kirjauksen taso. Jos tapahtuu poikkeus, tulostamme viestin tai lausunnon, jossa lukee 'poikkeus tapahtui' ja asetamme 'exc info=true'. Jos emme aseta sitä arvoon tosi, se tulostaa vain poikkeuslohkon eikä näytä jäljitystietoja.

Koska valitsimme komentosarjassamme 'VIRHE'-tason, se näyttää ensin juuren loggerin nimenä ja sen jälkeen 'poikkeus tapahtui' -viestin. Sen jälkeen näytetään jäljitystiedot, jotka sisälsivät tiedoston nimen, rivinumeron ja moduulin. Seuraavalla rivillä näkyy virheilmoitus, koska nimittäjä ei voi olla nolla. Ja koska nimittäjä on nolla tässä koodissa, virhettä kutsutaan nollajakajan virheeksi.

Johtopäätös

Tässä artikkelissa tarkastelimme pinojäljen tulostamista Python-lokiin sekä sitä, kuinka jäljitysmoduulia käytetään pinojäljen luomiseen. Ensimmäisessä esimerkissä jäljityskirjasto tuotiin ja käytettiin try and paitsi -menetelmiä. Koodi kirjoitettiin try-ruutuun. Jos poikkeus tapahtuu, se hyppää nopeasti poikkeuslohkoon ja näyttää poikkeuslausekkeen näytöllä. Toisessa esimerkissä käytimme kirjaamista, joka on samanlainen kuin ensimmäinen esimerkki. Poikkeus()-menetelmä käyttää kirjauksen 'info'- ja 'error'-tasoja. Jos poikkeus tapahtuu, se näyttää poikkeuslausekkeen.