Отклоните грешке у Питхон-у као хероју помоћу ових библиотека и алата

Želite li da postanete pravi stručnjak za rešavanje problema u Python-u? Uklonite greške u svom Python kodu koristeći ove izvanredne Python alate i biblioteke za debagovanje koje ćemo uskoro obraditi!

Python je programski jezik opšte namene, visokog nivoa i objektno orijentisan, koji se koristi u mnoge svrhe razvoja. Štaviše, to je efikasan alat za kreiranje različitih aplikacija, od razvoja veb aplikacija do veb skrejpinga i složenijih aplikacija kao što su mašinsko učenje i nauka o podacima.

Tokom razvoja, greške, poznate kao bagovi u programiranju, su neizbežne. Programeri preduzimaju različite korake kako bi otkrili i eliminisali postojeće i potencijalne greške iz koda. Na taj način se sprečava da programski kod bude oštećen. Ovaj proces nazivamo debagovanjem.

Ovaj članak će razmotriti nekoliko dostupnih Python programa za debagovanje koje možete koristiti. Takođe ćemo istražiti kako se ovi debageri razlikuju jedan od drugog i šta čini njihovu implementaciju efikasnom.

cProfiler biblioteka za debagovanje

cProfiler, je popularna biblioteka i C ekstenzija koja obavlja profilisanje dugotrajnog koda. Dugoročno gledano, ona identifikuje delove programskog koda koji zahtevaju dosta vremena za izvršavanje. Iako precizno određuje vreme potrebno za pokretanje različitih delova koda, ne otkriva u potpunosti, niti ispravlja greške u kodu.

Stoga, postoji potreba za korišćenjem drugih programa za debagovanje.

Na sreću, umesto toga možete koristiti preporučene biblioteke kao što su ipdb, Django-debug-toolbar, pyelftools, viztracer i py-spy kao alatke za debagovanje za vaš Python kod.

Ipdb alat za debagovanje

Python Debager sa omogućenim IPython-om je interaktivni program za debagovanje treće strane koji sadrži pdb funkcionalnost. Ipdb takođe ima podršku za interaktivnu IPython ljusku. Takva podrška uključuje automatsko dovršavanje (tab completion), podršku za boje i magične funkcije, između ostalih funkcionalnosti.

Ovaj debager omogućava pristup IPython programu za debagovanje izvozom relevantnih funkcija. Takođe nudi sličan interfejs za bolju introspekciju, baš kao u pdb modulu.

Debagovanje sa Ipdb-om

Biblioteka zahteva instalaciju pomoću pip komande, kao što je prikazano ispod.

pip install ipdb

Primer korišćenja ipdb-a bi izgledao ovako:

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()

Pokrenite Python datoteku koristeći komandu ispod, gde je test.py ime vaše datoteke:

python -m ipdb test.py

Uvoz ipdb i pozivanje funkcije ipdb.set_trace() omogućava pokretanje programa i aktivira debager tokom izvršavanja.

Funkcija ipdb.pm() (post mortem) se ponaša slično magičnoj funkciji %debug.

set_trace argumenti

Prosledite kontekst kao argument set_trace da biste prikazali određeni broj linija koda. Pored toga, cond, koji set_trace takođe prihvata kao argument, prihvata Bulove vrednosti i pokreće ipdb interfejs kada postavite cond na true.

Korišćenje konfiguracione datoteke

Postavite argument konteksta sa idpdb datotekom ili setup.cfg datotekom koja se nalazi u početnom direktorijumu i direktorijumu projekta, respektivno. Možete dodatno proveriti funkcionalnost ipdb-a.

Django Debug traka sa alatkama

Django traka sa alatkama za debagovanje je popularan alat za debagovanje u Django-u: Python framework-u.

Ovaj konfigurabilni set panela prikazuje informacije o trenutnom zahtevu ili odgovoru za debagovanje. Kada kliknete na traku sa alatkama, prikazuje se više detalja o sadržaju panela.

Ovaj alat temeljno proverava Django razvojno okruženje.

Pratite proces instalacije i uputstva za konfiguraciju ovde.

Pyelftools biblioteka

pyelftools biblioteka je isključivo napravljena u Pythonu. Ona analizira i raščlanjuje ELF datoteke i DWARF informacije o debagovanju i zahteva samo Python za izvršavanje.

Korišćenje Pyelftools je jednostavno jer ne zahteva spoljne biblioteke. Pored toga, korišćenje pyelftools-a bez instalacije je prilično jednostavno jer jednostavno zahteva podešavanje PYTHONPATH-a u varijablama okruženja.

Instalirate ga koristeći:

pip install pyelftools

Implementacija pyelftools jednostavno zahteva da ga uvezete i pozovete u vašem programu.

Alat za debagovanje „Sladoled“ 🍦

Ovo je još jedan efikasan alat za debagovanje za Python programere.

Korišćenjem Sladoled, odnosno ic(), dolazite do mnogih prednosti u odnosu na print(), kao što je navedeno u nastavku:

  • Kucanje je relativno brže, bukvalno.
  • Prikazuje strukture podataka na prilično dobar način.
  • Štampajte izraze ili imena promenljivih i njihove vrednosti pomoću ic().
  • Ističe sintaksu izlaza.
  • Opciono, uključuje kontekst programa, uključujući ime datoteke, broj reda i roditeljsku funkciju.

Pre korišćenja ovog paketa, instalirajte ga koristeći pip komandu ispod:

pip install icecream

Dobra stvar je što možete koristiti ic() u svim datotekama bez da ga obavezno uvozite u sve datoteke tako što ćete ga instalirati pomoću install(). Štaviše, install() dodaje ic() ugrađenom modulu. Sve datoteke koje interpreter uveze će deliti ic().

U vašu prvu root python datoteku, koju možete nazvati x.py, dodajte ic() koristeći install().

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

U y.py fajlu, koji uvozi x.py datoteku, pozovite ic().

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

Rezultati:

y
ic| z : 8

Ono što čini ic() efikasnijim je njegova sposobnost da pregleda promenljive koje su mu prosleđene, uključujući i samog sebe, a zatim odštampa svoje argumente i vrednosti argumenata kao u sledećem primeru.

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

Izlaz:

ic| mult(100): 400

Štaviše, možete umetnuti ic() u već postojeći kod pošto vraća svoje argumente. Primer ispod vraća ic| x: 12, zatim ic| y: 48.

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

Debagovanje pomoću py-spy alata

Možete koristiti py-spy za profilisanje uzoraka za Python programe kao alat za debagovanje. Bez ponovnog pokretanja programa ili izmene njegovog koda, py-spy vizualizuje izvršenje Python programa. Štaviše, zato što je napisan u Rust-u, ima niske troškove.

Pored toga, vredno je uzeti u obzir da je korišćenje py-spy protiv produkcijskog Python koda bezbedno, jer pokreće drugačiji proces od profilisanog Python programa.

Kao i svaki drugi prethodni alat koji smo videli, možete koristiti py-spy alat nakon što ga instalirate.

pip install py-spy

Uprkos tome što vaš Python program opslužuje produkcijski saobraćaj, još uvek možete da profilišete i debagujete ovaj program koristeći py-spy, što ga čini kritičnim alatom za Python profilisanje.

Viztracer debager

Alternativno, možete koristiti viztracer, alatku za debagovanje, kako biste pratili i vizualizovali izvršavanje vašeg Python programa. To je takođe alat za profilisanje sa niskim troškovima snimanja.

Šta čini viztracer efikasnim alatom za debagovanje?

  • Korišćenje je prilično jednostavno i ne zavisi od spoljnih paketa da bi funkcionisao.
  • Viztracer radi na svim platformama operativnog sistema: Windows, Linux ili macOS.
  • Njegov moćan front-end glatko prikazuje trag na nivou GB.
  • Koristi RegEx za evidentiranje proizvoljnih funkcija i dodatnih informacija kao što su promenljive i atribute, izuzetke (Raised Exceptions), radnje sakupljača smeća itd., bez izmene bilo kog dela koda u okviru vašeg izvornog koda.
  • Ono što viztracer čini alatom za debagovanje sa malim troškovima je njegova sposobnost da filtrira podatke koji vam nisu potrebni u vašem programu. Zatim zadržava stare informacije pre nego što izbaci zapise u JSON formatu.
  • Možete ga koristiti za umetanje prilagođenih događaja, kao što je trenutni događaj, promenljivi događaj i događaj trajanja dok program radi. Na ovaj način, radi kao debagovanje pomoću print(), osim što vas viztracer obaveštava kada se štampanje dešava dok pratite podatke.

Zaključak

Python profilisanje i debagovanje, baš kao i softversko profilisanje, je ključan korak u razvoju koji zahteva pažnju. Ovaj korak pomaže da se eliminišu bilo koji delovi koda sa greškama, tako da se ukupne performanse koda optimizuju.

Alati za debagovanje koje smo obradili gore su efikasni alati koji Python programerima čine posao prilično lakim.

Uviđajući da drugi alati za debagovanje funkcionišu efikasnije od cProfiler-a, možete, kao pravi heroj, da debagujete svoj Python kod i ispravite sve potencijalne greške koristeći ove debagere kako biste sprečili da vaš kod radi sa greškama.

Srećno debagovanje!