Mester Python-feilsøking: 7 kraftfulle verktøy og biblioteker!

Avdekke Python-feil: En dybdeanalyse av feilsøkingsverktøy

Ønsker du å bli en mester i feilsøking av Python-kode? Utforsk disse bemerkelsesverdige verktøyene og bibliotekene for Python-feilsøking som vi snart skal gå gjennom!

Python er et allsidig, høynivå og objektorientert programmeringsspråk som brukes i mange utviklingsscenarier. Det er et kraftig verktøy for å utvikle alt fra webapplikasjoner til skraping av data, og mer komplekse prosjekter som maskinlæring og dataanalyse.

Under utviklingsprosessen oppstår ofte feil, som kalles «bugs». Utviklere tar en rekke grep for å identifisere og eliminere disse feilene, både eksisterende og potensielle, for å sikre at programkoden ikke krasjer. Denne prosessen er kjent som feilsøking.

Denne artikkelen vil gi en detaljert oversikt over flere tilgjengelige Python-feilsøkere. Vi skal også se på hvordan disse verktøyene skiller seg fra hverandre, og hva som gjør dem effektive i bruk.

cProfiler – Et bibliotek for ytelsesanalyse

cProfiler er et utbredt bibliotek og en C-utvidelse som brukes til å analysere ytelsen til tidkrevende kode. Det identifiserer de delene av programkoden som bruker mest tid på å kjøre. Selv om det nøyaktig kartlegger tiden brukt på ulike deler av koden, identifiserer eller fikser det ikke feil.

Dette fører til behovet for å benytte andre feilsøkingsverktøy.

Heldigvis finnes det anbefalte biblioteker som ipdb, Django-debug-toolbar, pyelftools, viztracer og py-spy som kan brukes til å effektivt feilsøke Python-kode.

ipdb: En interaktiv feilsøker

ipdb (IPython-aktivert Python Debugger) er en interaktiv tredjeparts feilsøker som inneholder funksjonaliteten til pdb. Ipdb tilbyr også interaktivt IPython-skall, inkludert støtte for tab-utfylling, farger og «magiske» funksjoner.

Denne feilsøkeren gir tilgang til IPython-debuggeren gjennom eksponering av relevante funksjoner. Den tilbyr et lignende grensesnitt for forbedret introspeksjon, akkurat som pdb-modulen.

Feilsøking med Ipdb

Biblioteket installeres enkelt med pip-kommandoen:

pip install ipdb

Et eksempel på bruk av ipdb kan se slik ut:

import ipdb
alpha_list = ['a', 'b', 'c']
fruit_list = ['orange', 'mango', 'kiwi']

def nested_loop():
    for fruit in fruit_list:
        print (fruit)
        ipdb.set_trace()
    for x in alpha_list:
        print(x)
if __name__ == '__main__':
    nested_loop()

Kjør Python-filen med kommandoen (der test.py er filnavnet):

python -m ipdb test.py

Importering av ipdb og bruk av ipdb.set_trace()-funksjonen tillater starten av programmet og aktiverer feilsøkeren gjennom kjøringen.

Funksjonen ipdb.pm() (post mortem) fungerer på samme måte som %debug magic-funksjonen.

set_trace-argumenter

Send konteksten som et argument til set_trace for å vise flere linjer med kode. Argumentet «cond» aksepterer boolske verdier og starter ipdb-grensesnittet når «cond» settes til true.

Konfigurasjonsfil

Angi kontekst-argumentet med en idpdb-fil eller setup.cfg-fil i henholdsvis hjemme- og prosjektmappen. Det er verdt å undersøke ipdbs funksjoner nærmere.

Django Debug-verktøylinje

Django Debug-verktøylinjen er et populært feilsøkingsverktøy for Django, et rammeverk for Python.

Dette tilpassbare panelet viser feilsøkingsinformasjon for den aktuelle forespørselen eller svaret. Når du klikker på verktøylinjen, vises mer detaljert informasjon.

Dette verktøyet utfører en grundig inspeksjon av Djangos utviklingsmiljø.

Følg installasjons- og konfigurasjonsinstruksjonene her.

Pyelftools bibliotek

pyelftools er et bibliotek som er utelukkende skrevet i Python. Det analyserer og tolker ELF-filer og DWARF-feilsøkingsinformasjon, og krever kun at Python kjører.

Pyelftools er enkelt å bruke siden det ikke har noen eksterne bibliotekavhengigheter. I tillegg er det enkelt å bruke uten installasjon ved å justere PYTHONPATH i miljøvariablene.

Installeres med:

pip install pyelftools 

Implementering krever bare å importere det og kalle det i programmet ditt.

Icecream 🍦 feilsøkingsverktøy

Dette er et annet nyttig feilsøkingsverktøy for Python-utviklere.

Ved å bruke icecream sin funksjon ic(), får man flere fordeler sammenlignet med print(), som forklart under:

  • Raskere å skrive.
  • Skriver ut datastrukturer på en elegant måte.
  • Skriver ut uttrykk/variabelnavn og deres verdier med ic().
  • Fremhever syntaksen til utdataene.
  • Viser programkontekst, inkludert filnavn, linjenummer og overordnet funksjon.

Installer med:

pip install icecream

Du kan bruke ic() i alle filer uten å importere det, ved å installere det med install(). Dette legger ic() til den innebygde modulen, slik at den er tilgjengelig for alle filer.

I den første Python-filen, f.eks. x.py, legg til ic() med install().

from icecream import install
install()
from y import mult
mult()

I y.py-filen som importerer x.py, bruk ic():

def mult():
    z=8
    ic(z)

Resultat:

y
ic| z : 8

ic() inspiserer variabler og skriver ut argumentene og deres verdier, som vist under.

from icecream import ic
def mult(x):
    return x * 4
ic(mult(100))

Resultat:

ic| mult(100): 400

ic() returnerer også argumentene, så det kan settes inn i eksisterende kode. Eksemplet under returnerer ic| x: 12, deretter ic| y: 48.

from icecream import ic
x = 12
def mult(x):
    return x*4
    y = mult(ic(x))
    ic(y)

Feilsøking med py-spy

Bruk py-spy til å profilere Python-programmer som et feilsøkingsverktøy. py-spy visualiserer Python-programmets utførelse uten å måtte starte programmet på nytt eller endre koden. Det er skrevet i Rust, noe som gir lav overhead.

py-spy er trygt å bruke mot produksjonskode, da det kjører i en annen prosess enn det profilerte programmet.

Installer med:

pip install py-spy 

Selv om Python-programmet ditt håndterer produksjonstrafikk, kan du bruke py-spy til å profilere og feilsøke, noe som gjør det til et viktig Python-profileringsverktøy.

Viztracer debugger

Du kan også bruke viztracer for å spore og visualisere kjøringen av Python-programmet. Det er også et profileringsverktøy med lav overhead.

Hva gjør viztracer til et effektivt feilsøkingsverktøy?

  • Enkel å bruke uten eksterne pakker.
  • Fungerer på alle operativsystemer: Windows, Linux eller macOS.
  • Kraftig front-end som gjengir spor på GB-nivå.
  • Bruker RegEx til å logge funksjoner og tilleggsinformasjon som variabler og attributter, unntak, søppeltømming, uten å endre kildekoden.
  • Lav overhead ved å filtrere ut unødvendig data. Beholder gammel informasjon før loggen lagres i JSON-format.
  • Mulighet til å sette inn egendefinerte hendelser, som øyeblikkelig hendelse, variabel hendelse og varighetshendelse mens programmet kjører.

Konklusjon

Python-profilering og feilsøking er viktige trinn i programvareutvikling. Dette hjelper til med å identifisere og fikse feil, slik at koden optimaliseres.

Feilsøkingsverktøyene nevnt over er effektive for å lette arbeidet til Python-utviklere.

Ved å se at disse verktøyene fungerer bedre enn cProfiler, kan du som en dyktig utvikler feilsøke Python-koden din og fikse feil for å forhindre krasj.

Lykke til med feilsøkingen!