Feilsøking i Python

Når du nevner debugging, dette betyr at det kan være a bug i midten. Vel, jeg mener ikke en feil man kan finne i et hus - det jeg mener her er en programmeringsfeil!

Før vi går videre med denne opplæringen, la oss få noen vilkår ut av veien. La oss kort definere hva vi mener med a bug og debugging

bugs

En feil i databehandling kan forekomme både i programvare og maskinvare, men vårt fokus er her på programvare. La meg raskt nevne en tro på hvor begrepet bug kan ha oppstått. Det antas at den første bruken av begrepet bug i databehandling var da a ekte bug (mot) ble funnet i en av reléene til Mark II-datamaskinen. Begrepet bug ble også brukt på slutten av 1800-tallet for å beskrive tekniske feil.

Feil i programvare forårsaker at programmet produserer utilsiktet oppførsel. Det er et begrep som vanligvis brukes til å referere til en feil med ukjent plassering og grunn, og de kan forårsake alvorlige problemer (dvs. krasj et program).

I denne situasjonen, debugging kommer inn i spill.

debugging

Vel, man kan si at den beste måten å unngå problemer er ikke å generere feil i utgangspunktet. Men dette er dessverre ganske sjeldent, og det er ikke lett å generere et rent program fra begynnelsen. Å ha feil er en vanlig situasjon du ville falle inn i.

debugging er prosessen med å finne, analysere og korrigere eventuelle feil (feil) du kan støte på. Det ultimate målet med feilsøking er å fjerne slike feil, og å produsere et program som går og oppfører seg som ment. Det er viktig å merke seg at det meste av tiden vil bli brukt på å finne feilen siden, som vi nevnte ovenfor, har den opprinnelig et ukjent sted.

For å få en ide om hvor vanskelig feilsøking kan være, se hva Brian W. Kernighan måtte si:

Alle vet at debugging er dobbelt så hard som å skrive et program i utgangspunktet. Så hvis du er så smart som du kan være når du skriver den, hvordan vil du noen gang feilsøke den?

Håndtering av Python unntak

en unntak er et objekt som indikerer at vi har en feil (feil). Med andre ord bruker Python unntak for å kommunisere at det er feil i programmet. Dette ville være lokalisering en del av feilsøkingsprosessen. Motta unntaksobjektet og utføre de nødvendige tiltakene for å håndtere feilen refererer til håndtering unntaket. Dette ville være analyserer og korrigere trinn i feilsøkingsprosessen.

Try Statement

Pythons prøve setningen brukes til unntakshåndtering og har to former: prøve / unntatt og prøve / endelig. I det første tilfellet, den prøve Klausulen kan følges av en eller flere unntatt klausuler, mens det i sistnevnte tilfelle kun kan følges av bare en endelig klausul.

prøve / unntatt

De prøve / unntatt syntaks er som følger:

prøv: # prøv blokkeringskode bortsett fra: # unntatt blokkkode

Kroppen til prøve klausulen vil inneholde kode som kan generere et unntak, forutsatt at hvis et unntak ble generert, hoppes alle setningene i blokken over. På den annen side, kroppen av unntatt klausulen kalles unntakshåndterer, som det er vant til å ta unntaket. De unntatt blokkkode vil bare bli utført dersom et unntak er generert, ellers vil blokken bli hoppet over. Du kan bruke innebygde unntak som vist i Python Standard Library. 

La oss ta et eksempel for å gjøre ting klarere. Si at vi ble bedt om å legge inn en nevner i en divisjon formel. Siden deling med null er ikke tillatt, la oss skrive en prøve / unntatt setning som kontrollerer om det er en divisjon med null, og skriver ut en melding hvis denne feilen oppstod.

nomenklatur = input ('Oppgi en nevner verdi:') prøv: formula = 15 / denominator print 'Resultatet er' + str (formel) unntatt ZeroDivisionError: print 'Du forsøkte å dele med null som ikke er tillatt' 

Hvis du skriver inn verdien 5, for eksempel vil du få følgende utgang:

Resultatet er 3

Prøv nå å skrive inn verdien 0 som input. Hvilken utgang vil du få i dette tilfellet?

prøve / endelig

prøve / endelig er en annen måte å skrive trykket på i Python. endelig klausuler kalles opprydding / avslutning klausuler siden de alltid må løpes uavhengig av om et unntak oppstod i prøve blokkere.

La oss prøve eksemplet i avsnittet ovenfor, men med endelig klausul:

nomenklatur = inngang ('Oppgi en nevnerverdi:') prøv: formel = 15 / nevner utskrift 'Resultatet er' + str (formel) endelig: print 'Du forsøkte å dele med null som ikke er tillatt' 

Legg merke til at når du skriver inn verdien 5 Som input, for eksempel, vil du få følgende utgang:

Resultatet er 3 Du forsøkte å dele med null som ikke er tillatt

Heve søkeordet

De heve Søkeord er en annen måte å håndtere unntak i Python. I dette tilfellet vil du kunne hente dine egne unntak - det er unntak som heves når et problem utenfor omfanget av forventede feil oppstår.

La oss se på et eksempel på å bruke heve søkeord for å forstå konseptet mer.

prøv: x = input ('Skriv inn et tall i området 1-10:') hvis x<1 or x>10: heve eksepsjonell utskrift "flott! Du lyttet til meg og skrev inn et gyldig nummer 'bortsett fra: print' Ditt nummer synes å ligge utenfor rekkevidde 1-10 '

I dette eksemplet, hvis du skriver inn et nummer utenfor det tillatte området, skrive ut uttalelse i unntatt blokkering vil bli utført.

Fortsett, prøv noen verdier og sjekk utgangen.

Traceback-modulen

Pythons spore tilbake Modulen er en annen måte å håndtere unntak i Python. Det er i utgangspunktet brukt til å skrive ut stablingsspor av et program etter et unntak. De spore tilbake inneholder feilmeldingen, nummeret på linjen som forårsaket feilen, og anropsstabel, det er sekvensen av funksjonsanropene som førte til feilen.

La oss ta et eksempel som genererer en spore tilbake:

def createException (navn): raise Exception ('Det virker som' + navn + 'hevet et unntak') createException ('Abder')

Hvis du kjører dette skriptet, får du en utgang som ser ut som følger:

Traceback (siste samtale siste): File "test.py", linje 4, i  createException ('Abder') File "test.py", linje 2, i createException raise Exception ('Det virker som' + navn + 'hevet et unntak') Unntak: Det ser ut til at Abder har gitt et unntak

Legg merke til at feilen (feil) skjedde på linje 2 i createException funksjon. Legg merke til at anropsstakken kan hjelpe oss med å spore hvilken samtale som førte til feilen, som i dette tilfellet er anropet som oppstod i linje 4.

Opplæringen blir lengre, og jeg vil gjerne stoppe på dette punktet. Som du har sett, er feilsøkingsprogrammer virkelig en naturlig og vanlig ting å gjøre, og jeg tror at de typer feil du så i denne opplæringen, er kjent, ikke de?

Det finnes andre måter å feilsøke et Python-program på og håndtere unntak. En kjent måte, for eksempel, er hevdet uttalelse

Glad feilsøking!