Piton

Vodič za praćenje Pythona

Vodič za praćenje Pythona
Jednom kada se prilikom izvođenja koda stvori izuzetak, Python prikazuje povratno praćenje. Čini se da je traceback izvješće u Pythonu koje uključuje pozive funkcija upućene na određenom mjestu u kodu, tj.e., nakon što pogriješite, predlažemo da je ispustimo unatrag (trackback). Traganje može pružiti detalje o tome što se dogodilo s kodom ako kod primi pogrešku. Takvi tragovi mogu izgledati pomalo iscrpljujuće, ali mogu biti stvarno korisni dok ih ne uklonite i vidite čemu vas pokušava naučiti. Puno je podataka u praćenju Pythona koji će vam pomoći analizirati i ispraviti uzrok problema koji se generira u vašem kodu.

Protumačite Traceback:

Pregled nekih povratnih podataka može dati bolju interpretaciju znanja koje pružaju kako bi vam omogućio da nešto izvučete. Pogledajmo tumačenje kako osnovna iznimka može biti praćenje unatrag. Evo primjera jednostavnog koda koji generira pogrešku povratnog praćenja u izvršavanju Spydera (Python 3).

Ispod je slika praćenja pogreške. Prvi redak prikazuje mjesto datoteke. Evo nekoliko specifikacija za sve linije koje koriste boje.

Bijela: Traceback (najnoviji zadnji poziv) je izjava traganje. S druge strane, bijeli dio zadnjeg retka prikazuje povezane informacije o pogrešci.

Zelena: Kazivanje imena i lokacije datoteke ima pogrešku.

Plava: Prikazuje broj retka datoteke u kojoj se dogodila pogreška.

Žuta boja: Prikazuje stvarnu liniju na kojoj se pojavila iznimka.

Crvena: Vrsta pogreške.

Evo nekoliko važnih pogrešaka u povratnom praćenju:

NameError
Pogreška indeksa
KeyError
TipError
valueError
ImportError / ModuleNotFound

Pogreška u imenu:
Kad god želite protumačiti varijablu koja nije navedena u kodu, pojavljuje se NameError. Evo jednostavnog primjera NameError traganja. Imamo varijablu 'broj' definirana s nekom vrijednošću, dok je u ispis izjavu, tiskali smo 'zanijemio', što nigdje nije definirano u kodu. Pokrenimo ovaj kod i provjerimo što se događa.

Možete vidjeti da se dogodila povratna traka NameError jer nismo definirali varijablu 'numb', pa kako se može ispisati. Zbog toga ovaj program prikazuje NameError i razrađuje ga s dodatnim informacijama u zadnjem retku s bijelim i crvenim tekstom. Žuti tekst prikazuje točan kod gdje se pogreška javlja.

Pogreška indeksa:

Pogreška IndexError proizvodi se kada je u kodu definirana serija koja je nedostupna. Definirali smo a popis imenovan 'novi' imajući 5 indeksa s nekim vrijednostima u sebi. Nakon toga, moramo navesti naredbu print za izlaz vrijednosti na indeks broj 9.

Kada izvršimo ovaj kôd, generirat će IndexError definirajući indeks izvan dosega. Kako smo definirali popis od 5 indeksa, stoga ispisanom indeksnom broju, koji je 9, nije moguće pristupiti jer nije u našem rasponu.

Ključna pogreška:

Python generira ključnu pogrešku kada pokušate doći do datoteke ključ koji je nije definirano ili mapiran, posebno iz a rječnik. To je više poput IndexError. Dakle, pogledajmo jednostavan primjer rječnika s imenom 'slučajno' s dva ključa definirana u njemu s nekim vrijednostima dodijeljenim tim ključevima. U sljedećem smo retku ispisali nazvani ključ "A" u izjavi za ispis.

Oh! Dobili smo KeyError s povratom podataka. To je zbog pogrešnog ključa navedenog u ispisu izjave, koji nije definiran u rječniku. Može se pogriješiti davanjem ključa velikog slova, dok je u rječniku definiran ključ malog slova.

Pogreška tipa:

Pogreška TypeE definirana je kao iznimka koja se javlja kada je neka operacija ili metoda zamazana u nepodoban tip entiteta ili varijable. Imamo primjer jednostavne varijable koja uzima dvije vrijednosti dok ovaj niz dodaje obje vrijednosti. Prva vrijednost je vrsta niza, a druga je cijeli broj. Izjava o ispisu ispisuje rezultat dodavanja.

Kada se ovaj kôd izvede, on pokreće iznimku. Ova se iznimka odnosi na pogrešnu vrstu objekata koji se spajaju. Razrađuje se da ne možete dodati varijablu tipa string s varijablom cijelog broja.

Pogreška vrijednosti:

Vrijednostna pogreška definirana je kao iznimka koja se javlja samo kada neke ugrađena metoda uzima argument desnog tipa ali pogrešna vrijednost u tome. Pogledajmo jedan mali primjer. Koristimo ugrađenu metodu int () s nekom vrijednošću niza u ispisu.

Kada izvršite ovaj jednoredni kôd, generirat će ValueError jer koristimo funkciju cijelog broja dok mu dajemo vrijednost niza za izvršenje. Zato će pokazati da funkcija int () u sebi ima nevaljanu vrijednost.

S druge strane, ako mu date neku razlomljenu vrijednost, pretvorit će je u cjelobrojnu vrijednost.

Ovaj kod daje 11, jer uzima samo cijeli broj, dok se decimalni dio u potpunosti zanemaruje.

Pogreška uvoza / modul nije pronađen:

Ponekad moraš uvoz neki paketi ili modula u vašem python kodu za korištenje posebnih funkcionalnosti putem njih. Povrat praćenja ImportError pronaći ćete kad je donekle pogrešno u vezi s izrazom Import u kodu. Ova pogreška povratnog praćenja pojavljuje se kada je tako nesposoban do pronaći određeni modul ili nešto unutar paketa. Ovdje smo uvezli dva modula, 'pip' i 'Java', u našem kodu.

Tijekom izvršavanja ovog koda dat će ModuleNotFoundError povratno praćenje. To je zato što python knjižnica ne podržava uvezeni modul 'java'. S druge strane, ne daje iznimku pri uvozu modula 'pip' jer je to modul koji podržava Python.

Zaključak:

Traganje Pythona pruža izvrsno znanje koje će vam pomoći da otkrijete što u kodu ide netočno. Bez obzira radite li to prvi put ili jednostavno ne razumijete što radi, generiranje traganja može biti pomalo zastrašujuće. Da biste postali jači Python programer, važno je naučiti koje pojedinosti daje Python traceback.

OpenTTD vs Simutrans
Stvaranje vlastite simulacije prijevoza može biti zabavno, opuštajuće i izuzetno primamljivo. Zbog toga morate isprobati što više igara kako biste pro...
Vodič za OpenTTD
OpenTTD je jedna od najpopularnijih igara za poslovnu simulaciju. U ovoj igri morate stvoriti prekrasan prijevoznički posao. Međutim, počet ćete u poč...
SuperTuxKart za Linux
SuperTuxKart sjajan je naslov osmišljen kako bi vam besplatno pružio iskustvo Mario Kart na vašem Linux sustavu. Prilično je izazovno i zabavno igrati...