Python

Pythoni jälitamise õpetus

Pythoni jälitamise õpetus
Kui koodi käivitamisel on loodud erand, kuvab Python jälitustegevuse. Jälgimine näib olevat Pythonis aruanne, mis sisaldab koodis teatud kohas tehtud funktsioonikõnesid, s.t.e., kui teil on viga, soovitatakse meil see tagasi lükata (jälitamine). Jälgimine võib anda üksikasju selle kohta, mis koodiga läks, kui kood saab vea. Sellised jäljed võivad tunduda veidi kurnavad, kuid need võivad olla tõesti kasulikud, kuni te selle maha võtate ja näete, mida see teile õpetada üritab. Pythoni jälitusseadmes on palju andmeid, mis aitavad teil analüüsida ja parandada teie koodis genereeritud probleemi põhjust.

Tracebacki tõlgendamine:

Mõne jälje vaatamine võib paremini mõista nende pakutavaid teadmisi, et saaksite neist midagi saada. Heidame pilgu tõlgendusele, kuidas põhierand võib olla tagasiside. Siin on näide lihtsast koodist, mis genereerib Spyderi käivitamisel jälitamisvea (Python 3).

Allpool on vea jälitamise pilt. Esimene rida näitab faili asukohta. Siin on mõned värve kasutavate joonte spetsifikatsioonid.

Valge: Traceback (viimane kõne viimati) on jälitustagastus. Teiselt poolt näitab viimane rida valge osa seotud veateavet.

Roheline: Faili nime ja asukoha ütlemisel on viga.

Sinine: Näitab faili rea numbrit, kus viga on toimunud.

Kollane: See kuvab rea, kus erand ilmus.

Punane: Vea tüüp.

Siin on mõned olulised vead jälitamises:

NimiViga
IndexError
KeyError
TypeError
väärtusViga
ImportError / ModuleNotFound

Nimeviga:
Alati, kui soovite tõlgendada muutujat, mida pole koodis täpsustatud, kuvatakse nimiError. Siin on NameError jälgimise lihtne näide. Meil on muutuja "number" määratletud teatud väärtusega, samas kui printida avalduse, oleme printinud "tuim", mida pole koodis kuskil määratletud. Käivitame selle koodi ja kontrollime, mis juhtub.

Näete, et NameError'i jälitamine on toimunud, kuna me pole määranud muutujat "tuim", kuidas siis seda välja printida. Seetõttu kuvatakse selles programmis NameError ja selle lisamine viimase ja valge ja punase tekstiga reale. Kollane tekst näitab täpset koodi, kus viga ilmneb.

Indeksi viga:

IndexError tekib siis, kui koodis on määratletud seeria, mis on käeulatusest väljas. Oleme määranud a nimekirja nimega "uus" millel 5 indeksit mõningate väärtustega. Pärast seda peame välja andma käsu print, et väljastada väärtus aadressil indeks number 9.

Selle koodi käivitamisel genereerib see IndexErrori, mis määrab indeksi vahemikust välja. Kuna oleme määranud 5 indeksi loendi, ei pääse trükitud indeksinumbrile, mis on 9, juurdepääs, kuna see ei kuulu meie vahemikku.

Põhiviga:

Kui proovite jõuda, loob Python võtmevea võti mis on ei ole defineeritud või kaardistatud, eriti a-st sõnastik. See on rohkem nagu IndexError. Niisiis, vaatame lihtsat näidet nimega sõnaraamatust "juhuslik" kahe selles määratletud võtmega, millele on antud mõned väärtused. Järgmisele reale oleme printinud nimega võtme "A" väljatrükis.

Oh! Meil on jälitatav KeyError. Selle põhjuseks on prindilauses toodud vale võti, mida sõnastikus pole määratletud. Võib teha vea, kui esitate suurtähega võtme, samas kui sõnastikus on selles määratletud väike täht.

Tüüp Viga:

TypeError on määratletud erandina, mis tekib siis, kui mõni operatsioon või meetod on määrdunud sobimatu tüüp üksuse või muutuja väärtus. Meil on näide lihtsast muutujast, mis võtab kaks väärtust, samal ajal kui see string lisab mõlemad väärtused. Esimene väärtus on stringi tüüp ja teine ​​on täisarvu tüüp. Väljatrükk prindib lisamise tulemuse.

Kui see kood täidetakse, tekitab see erandi. See erand on seotud vale liidetava objekti tüübiga. See on väljatöötamisel, et stringitüüpi muutujat ei saa lisada täisarvu muutujaga.

Väärtusviga:

Väärtus Viga määratletakse erandina, mis ilmneb ainult siis, kui mõni neist on sisseehitatud meetod võtab õige tüübi argument kuid vale väärtus selles. Vaatame väikest näidet. Kasutame sisseehitatud meetodit int () mõne stringiväärtusega prindilauses.

Selle üherealise koodi käivitamisel genereerib see ValueErrori, kuna kasutame funktsiooni täisarvu tüüp, andes samal ajal stringiväärtuse käivitamiseks. Sellepärast näitab see, et funktsioonil int () on selles kehtetu väärtus.

Teisest küljest, kui annate sellele murdarvu, teisendab see selle täisarvuks.

See kood väljastab 11, kuna see võtab ainult täisosa, samal ajal kui kümnendosa täielikult ignoreeritakse.

Impordiviga / moodulit ei leitud:

Mõnikord peate import mõned pakendid või moodulid oma Pythoni koodis, et kasutada nende kaudu spetsiaalseid funktsioone. ImportError-jälgimise leiate siis, kui see on koodis oleva Import-lause osas mõnevõrra ekslik. See jälgimisviga ilmneb siis, kui olete võimatu kuni leidma konkreetne moodul või midagi paketi seest. Siin oleme importinud kaks moodulit, "pip" ja "java", meie koodis.

Selle koodi käivitamise ajal saab ModuleNotFoundError jälile. Seda seetõttu, et imporditud moodulit 'java' ei toeta pythoni teek. Teiselt poolt ei anna see erandit mooduli 'pip' importimisel, kuna see on Pythoni toetatud moodul.

Järeldus:

Pythoni jälitussüsteem pakub suurepäraseid teadmisi, mis aitavad teil aru saada, mis koodis valesti läheb. Sõltumata sellest, kas teete seda esimest korda või lihtsalt ei saa aru, mida see teeb, võib jälitustagupõlv veidi hirmutada. Tugevamaks Pythoni programmeerijaks saamiseks on oluline õppida, milliseid üksikasju Pythoni jälgimine annab.

Viis parimat mängu püüdmise kaarti
Me kõik oleme YouTube'is voogesituse mänge näinud ja armastanud. PewDiePie, Jakesepticye ja Markiplier on vaid mõned tipptasemel mängijatest, kes on t...
Kuidas mängu Linuxis arendada
Kümme aastat tagasi ei osanud paljud Linuxi kasutajad ennustada, et nende lemmikoperatsioonisüsteem on ühel päeval populaarne kommertsvideomängude män...
Kommertsmängumootorite avatud lähtekoodiga sadamad
Tasuta, avatud lähtekoodiga ja platvormidevaheliste mängumootorite puhkusereise saab kasutada nii vanade kui ka mõnede üsna hiljutiste mängude pealkir...