Felsök Python som en hjälte med dessa bibliotek och verktyg

By rik

Utforska effektiva metoder för Python-felsökning

Är du redo att bemästra konsten att felsöka Python-kod? Dyk in i världen av kraftfulla felsökningsverktyg och bibliotek som vi nu ska undersöka för att göra dig till en expert på området!

Python, ett mångsidigt, högnivå- och objektorienterat programmeringsspråk, används i en mängd olika utvecklingsscenarier. Dessutom är det ett ovärderligt verktyg för skapande av diverse applikationer, från webbapplikationer till avancerade tekniker som maskininlärning och dataanalys.

Under utvecklingsprocessen är fel, ofta kallade buggar, oundvikliga. Utvecklare vidtar flera åtgärder för att identifiera och åtgärda potentiella problem i koden. På så sätt förhindras oväntade krascher och programvaran fungerar som avsett. Denna process benämns felsökning.

Denna artikel utforskar ett urval av tillgängliga Python-felsökare. Vi kommer att undersöka hur dessa verktyg skiljer sig åt och vad som gör dem effektiva i praktiken.

cProfile-biblioteket för prestandaanalys

cProfile är ett flitigt använt bibliotek och en C-förlängning som utför profilering av kod. Det hjälper till att identifiera de sektioner av koden som tar mest tid att exekvera. Även om det ger detaljerad information om tidskonsumtionen för olika delar av koden, löser det inte direkt buggar i koden, vilket leder till behovet av ytterligare felsökningsverktyg.

Lyckligtvis finns flera användbara alternativ som ipdb, Django Debug Toolbar, pyelftools, viztracer och py-spy, som kan användas för felsökning av din Python-kod.

Interaktiv felsökning med Ipdb

Ipdb (IPython Debugger) är en interaktiv felsökare som bygger på funktionaliteten i pdb. Ipdb kombinerar kraften i pdb med den interaktiva skalmiljön i IPython, vilket ger bland annat flikkomplettering, färgstöd och magiska funktioner.

Denna felsökare ger tillgång till IPython-felsökaren genom att exponera relevanta funktioner. Det liknar också gränssnittet i pdb-modulen, vilket gör introspektion av koden mer användarvänlig.

Använda Ipdb för felsökning

Biblioteket installeras enkelt med pip:

pip install ipdb

Ett exempel på hur man använder ipdb i kod kan se ut så här:

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

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

Kör Python-filen med följande kommando, där ”test.py” är filnamnet:

python -m ipdb test.py

Genom att importera ipdb och köra `ipdb.set_trace()` aktiveras felsökaren vid den punkten i koden. Funktionen `ipdb.pm()` (post mortem) fungerar på liknande sätt som IPythons magiska funktion `%debug`.

set_trace-argument

Genom att skicka kontexten som ett argument till `set_trace` kan du visa flera rader av kod. Dessutom accepterar `set_trace` ett villkorsargument (’cond’) som, om det är inställt på true, startar ipdb-gränssnittet.

Konfigurationsfiler

Du kan konfigurera kontextargument med en ”idpdb”-fil eller en ”setup.cfg”-fil som lagras i din hem- eller projektmapp. Du är välkommen att utforska alla ipdbs funktioner för en djupare förståelse.

Django Debug Toolbar

Django Debug Toolbar är ett omtyckt felsökningsverktyg för Django, ett Python-ramverk.

Verktygsfältet visar detaljerad information om den aktuella begäran eller svaret. När du klickar på verktygsfältet visas ytterligare information.

Verktyget ger en detaljerad inspektion av Djangos utvecklingsmiljö.

För att installera och konfigurera, följ instruktionerna här.

Pyelftools-biblioteket

pyelftools är ett bibliotek helt skrivet i Python. Det analyserar ELF-filer och DWARF-felsökningsinformation. Pyelftools kräver endast Python för att fungera, utan externa bibliotek.

Det är enkelt att använda pyelftools eftersom det inte kräver någon specifik installation. Genom att ändra PYTHONPATH i miljövariablerna kan du använda biblioteket direkt.

Installation sker med:

pip install pyelftools

För att använda pyelftools behöver du bara importera det och använda det i ditt program.

Icecream-felsökningsverktyget 🍦

Detta verktyg är ett annat effektivt alternativ för felsökning av Python-kod.

Icecream, och dess `ic()`-funktion, har många fördelar jämfört med det vanliga `print()`-uttrycket:

  • Det är snabbare att skriva.
  • Det ger en tydlig utskrift av datastrukturer.
  • Det visar uttryck eller variabelnamn och deras värden.
  • Det använder syntaxmarkering för utdata.
  • Det visar även programkontext, som filnamn, radnummer och den överordnade funktionen.

För att installera paketet, använd pip:

pip install icecream

Du kan använda `ic()` i alla filer utan att importera den i varje fil genom att använda `install()`. Denna funktion lägger till `ic()` till den inbyggda modulen, vilket gör den tillgänglig i alla filer som tolken importerar.

I din första root-Python-fil, till exempel `x.py`, lägger du till `ic()` med `install()`:

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

I filen `y.py` importeras `x.py` och `ic()` används:

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

Resultat:

y
ic| z: 8

`ic()` inspekterar variabler och skriver ut deras argument och argumentvärden. Till exempel:

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

Output:

ic| mult(100): 400

Du kan infoga `ic()` i befintlig kod eftersom den returnerar sina argument. Exemplet nedan ger resultatet `ic| x: 12` och sedan `ic| y: 48`.

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

Felsökning med Py-spy

Du kan använda py-spy för att profilera Python-program. Py-spy visualiserar Python-programmens exekvering utan att starta om dem eller ändra koden. Eftersom det är skrivet i Rust, har det också en låg overhead.

Dessutom är det säkert att använda py-spy mot produktions-Python-kod eftersom det körs som en separat process från det profilerade Python-programmet.

Som alla tidigare verktyg vi har gått igenom kan du installera py-spy med pip:

pip install py-spy

Med py-spy kan du profilera och felsöka produktionskod, vilket gör det till ett användbart verktyg.

Viztracer-felsökaren

Viztracer är ett annat felsökningsverktyg för att spåra och visualisera exekvering av Python-program. Det har låg overhead-loggning.

Vad gör viztracer till ett effektivt felsökningsverktyg?

  • Det är lätt att använda och kräver inga externa paket.
  • Viztracer fungerar på alla operativsystem (Windows, Linux, macOS).
  • Det kan hantera och visualisera mycket stora spårningsdata.
  • Det loggar godtyckliga funktioner och extra information som variabler och attribut, undantag och skräpsamlingsaktivitet utan att ändra din källkod.
  • Det kan filtrera bort data och behåller endast relevant information.
  • Du kan infoga anpassade händelser som omedelbara händelser, variabla händelser och varaktighetshändelser. Det fungerar på liknande sätt som utskriftsfelsökning, men låter dig veta när utskriften sker under spårningen.

Slutsats

Python-profilering och felsökning är väsentliga steg i programutveckling. De hjälper till att identifiera kod med buggar och optimera prestanda. De verktyg som vi har diskuterat gör felsökningsprocessen enklare för utvecklare.

Med dessa verktyg kan du effektivt felsöka din kod och undvika krascher. Lycka till med felsökningen!