Udskriv Stacktrace i Pyhton Log

Udskriv Stacktrace I Pyhton Log



En samling af tilgangsopkald på et bestemt tidspunkt er repræsenteret i en stacktrace. Når et program rejser en undtagelse, genererer Python en stacktrace, også kendt som en traceback eller backtrace. Der er en række detaljer i denne stacktrace, som kan udnyttes til at lokalisere problemet. Python-logningspakken kommer med flere grundlæggende funktioner og har flere niveauer af logning, herunder 'fejlretning', 'info', 'advarsel', 'fejl' og 'kritisk'.

Eksempel 1: Udskriv Stacktrace i Python ved at bruge Traceback-modulet

I dette eksempel vil vi bruge et simpelt stykke kode til at demonstrere, hvordan man implementerer Pythons sporingsmodul for at udskrive staksporet. Denne trackback-pakke indeholder en vellidt funktion til at indsamle, opbevare og udstille stakspor fra computersprog. Det duplikerer trofast et scripts stack trace-udskrivningsoperationer. Hvis du nogensinde har brug for at se stak-sporet, er det vigtigt.

Med andre ord viser en staksporing hver operation, der kom forud for den, der resulterede i problemet. Den vigtigste information rapporteres altid på den sidste linje i en stack-sporing, hvilket er når fejlen identificeres. Alle funktionskaldene i den resulterende fejl kan bruges til hurtigt at lokalisere og løse problemet.







Lad os starte med at implementere koden ved at importere Traceback Python-biblioteket. Derefter, i den følgende linje, opretter vi et array og viser elementerne med nogle værdier. Arraylistens værdier er '7', '8', '9' og '10'. Der er fire værdier i matrixlisten. Denne array-liste blev gemt i den tidligere initialiserede variabel 'A'.



Efter det bruger vi udtrykket 'try' og værdien 'A=6' i den følgende linje. Vi bruger try-except-blokkene i Python til at administrere undtagelserne. Denne tilgang bruges til at skrive det script, der kan rejse en fejl i blokoverskriften. Undtagelser er i det væsentlige fejl, svarende til syntaksfejl. Under en undtagelse af et program er undtagelseshåndtering den unikke handling at reagere på undtagelsen. For at vende tilbage til scriptet bruger vi 'undtagen' i næste linje.



I undtagen blokken bruger vi 'traceback.print exc()', som er en forkortelse for 'printing exception'. Vi bruger 'print()'-funktionen inde i undtagelsesboksen, som er 'programslut', så denne sætning udskrives, når undtagelsen opstår. Hvis der nu opstår en undtagelse i prøveboksen, flytter programmet straks til undtagen blokkene og fortsætter. Hvis der ikke opstår en undtagelse, springes undtagelsesblokken helt over. Nu hvor undtagelsen sker, kan vi se i koden, at værdien '6' blev indtastet i prøveboksen, selvom den ikke er på matrixlisten. Som et resultat heraf går koden straks til undtagelsesboksen og udskriver sætningen 'program slutter' i outputdisplayet.





De forskellige funktionskald, der udgør sporingen, er ordnet fra det seneste til det mindst seneste, fra bunden til toppen. Disse operationer er alle repræsenteret af to-linjers udsagn. Hvert opkald begynder med filnavnet, sekvensnummeret og modulnavnet, som alle angiver kodens placering. Derefter viser den undtagelsesudskriftssætningen 'program slut', da værdien '6' ikke var på den erklærede liste, hvilket resulterer i outputtet 'listeindeks uden for rækkevidde'.



Eksempel 2: Udskriv Stacktrace i Python ved at bruge metoden Logging.Exception()

I dette eksempel vil vi demonstrere, hvordan man bruger Pythons 'logging.exception()'-metode til at udlæse en stacktrace. Logningspakken i Python lader os logge fejlene samt registrere fejlene og undtagelserne. Logningsmoduler giver os et udvalg af logningsmoduler, herunder 'debug', 'info', 'advarsel', 'fejl' og 'kritisk'. Disse er i det væsentlige lag af logningsmoduler, for at sige det enkelt. For at logge en undtagelse med en fejl i Python skal du bruge funktionen 'logging.exception()'. Denne funktion tilføjer en rapport med ERROR-status til denne logger. Det menes, at parametrene er til debugging. Oplysningerne om undtagelsen er vedhæftet logningsrapporten. Det eneste sted, hvorfra denne procedure kan påberåbes, bør være undtagelsesbehandlerne.

Lad os nu se på koden. For det første importerer vi to biblioteker – det første er logning og det andet er sporing. Derefter bruger vi 'basicConfig'-metoden med 'logging' og angiver niveauet som 'logging.Debug'. Det eneste argument, som 'getLogger()'-metoden tager, er 'navn'. Vi bruger det således, når vi bruger funktionen 'logging.getlogger'. Hvis der gives et navn, genereres en reference til en loggerinstans med det navn; ellers returneres roden. Det samme loggerobjekt refereres til af mange getLogger()-operationer med samme identitet.

Derefter plejer vi at prøve, og som vi ved i prøveblokken, skriver vi koden, der kan give anledning til en undtagelse. I dette tilfælde bruger vi 'myfunction()'. Hvis den givne situation ikke stemmer overens, sker der en undtagelse. Derefter springer koden straks til undtagen blokken. I denne undtagelsesblog bruger vi 'logging.info'. Inde i den skriver vi beskeden, som vi vil udskrive, hvilket er 'undtagelse fandt sted'. Dette skyldes, at hvis der sker en undtagelse, opstår der simpelthen en fejl, så viser den denne meddelelse på skærmen. Men hvis fejlen ikke opstår, ignorerer den hele undtagelsesmeddelelsen.

Vi indstiller også 'exc info=True' med beskeden. Hele stacktrace vil blive inkluderet i logningen, når exc info er sat til True, svarende til hvad der sker med 'logger.exception()'. Den eneste forskel er, at du hurtigt kan skifte logniveau fra fejl til noget andet ved blot at skifte loggeren ud.

Nu hvor der opstod en undtagelse i scriptet, er den første outputlinje meddelelsen 'undtagelse fandt sted' efterfulgt af logningsniveauet, der blev brugt i scriptet, som er 'info.' Loggerens navn vises som roden i dette tilfælde. Derefter dukker sporingsopkaldet op og viser modul-, linje- og filnavne. Endelig er fejlmeddelelsen 'min funktion' ikke defineret.

Lad os tale om noget mere kode, der gør brug af logning. Undtagelse()-metoden begynder med at importere biblioteket til logning. Derefter initialiseres to variable - 'm' og 'n' - og får værdierne henholdsvis '7' og '0'. Prøv-blokken bruges nu i det efterfølgende trin. I den skriver vi den kode, der kan forårsage en undtagelse. Først erklærer vi variablen 'o'. Derefter sætter vi 'm' divideret med 'n'. Dette medfører en undtagelse, fordi nævneren er nul, og vi kan ikke dividere noget tal med nul, hvilket betyder, at fejlene vil opstå. Som et resultat springer koden til undtagen blok, hvor 'logging.error' bruges. Fejl er niveauet for logning. Hvis der opstår en undtagelse, udskriver vi en meddelelse eller en erklæring, der siger 'undtagelse opstod', og vi indstiller 'exc info=true'. Hvis vi ikke indstiller den til sand, udskriver den kun undtagelsesblokken og viser ikke sporingsoplysningerne.

Fordi vi valgte 'FEJL'-niveauet i vores script, viser det først roden som navnet på loggeren, efterfulgt af meddelelsen 'undtagelse opstod'. Sporingsoplysningerne, som inkluderede filnavnet, linjenummeret og modulet, vises derefter. Den næste linje viser så en fejlmeddelelse, da nævneren ikke kan være nul. Og da nævneren er nul i denne kode, omtales fejlen som en nul-divisor fejl.

Konklusion

I denne artikel har vi set på processen med at udskrive en stacktrace i en Python-log samt hvordan man bruger sporingsmodulet til at oprette en stacktrace. I det første eksempel blev sporingsbiblioteket importeret, og forsøg og undtagen metoder blev brugt. Koden blev skrevet i prøveboksen. Hvis der opstår en undtagelse, hopper den hurtigt til undtagelsesblokken og viser undtagelsessætningen på skærmen. I det andet eksempel brugte vi logningen, som ligner det første eksempel. Undtagelse()-metoden bruger logføringsniveauerne 'info' og 'fejl'. Hvis der opstår en undtagelse, viser den en undtagelseserklæring.