Foutopsporing in Python

Bij vermelding debugging, dit betekent dat er misschien een is kever middenin. Nou, ik bedoel niet een bug die je in een huis zou kunnen vinden - wat ik bedoel is hier een programmeerbug!

Voordat we verder gaan met deze tutorial, laten we wat termen uit de weg ruimen. Laten we kort definiëren wat we bedoelen met a kever en debugging

bugs

Een bug in computergebruik kan zowel in software als hardware voorkomen, maar onze focus ligt hier op software. Laat me snel een overtuiging noemen over waar de term staat kever zou kunnen zijn ontstaan. Er wordt aangenomen dat het eerste gebruik van de term kever in computing was toen a echt bug (mot) werd gevonden in een van de relais van de Mark II-computer. De voorwaarde kever werd ook gebruikt aan het eind van de 19e eeuw om technische storingen te beschrijven.

Bugs in software zorgen ervoor dat het programma ongewenst gedrag produceert. Het is een term die vaak wordt gebruikt om te verwijzen naar een fout met onbekende locatie en reden, en ze kunnen ernstige problemen veroorzaken (zoals het crashen van een programma).

In deze situatie, debugging komt in het spel.

debugging

Welnu, je zou kunnen zeggen dat de beste manier om problemen te voorkomen niet is om bugs te genereren in de eerste plaats. Maar dit is helaas vrij zeldzaam en het is niet eenvoudig om vanaf het begin een schoon programma te genereren. Bugs hebben is een normale situatie waarin je zou vallen.

debugging is het proces van lokaliseren, analyseren en corrigeren van bugs (fouten) die u tegen kunt komen. Het uiteindelijke doel van foutopsporing is om dergelijke fouten te verwijderen en een programma te maken dat draait en zich gedraagt ​​zoals bedoeld. Het is belangrijk op te merken dat de meeste tijd zal worden besteed aan het lokaliseren van de bug, omdat deze, zoals we hierboven vermeldden, oorspronkelijk een onbekende locatie heeft.

Om een ​​idee te krijgen van hoe moeilijk debuggen zou kunnen zijn, kijk eens wat Brian W. Kernighan te zeggen had:

Iedereen weet dat debuggen in de eerste plaats twee keer zo moeilijk is als het schrijven van een programma. Dus als je zo slim bent als je kunt zijn als je het schrijft, hoe zal je het dan ooit debuggen??

Python-uitzonderingen verwerken

Een uitzondering is een object dat aangeeft dat we een fout (fout) hebben. Met andere woorden, Python gebruikt uitzonderingen om te communiceren dat er fouten in het programma zitten. Dit zou het zijn lokalisatie onderdeel van het debuggingproces. Het ontvangen van het uitzonderingsobject en het uitvoeren van de nodige acties voor het omgaan met de bug, verwijst naar behandeling de uitzondering. Dit zou het zijn analyseren en corrigeren stappen in het debugproces.

De try-verklaring

Python's proberen verklaring wordt gebruikt voor het afhandelen van uitzonderingen en heeft twee vormen: probeer / behalve en proberen / eindelijk. In het eerste geval, de proberen clausule kan worden gevolgd door een of meer behalve clausules, terwijl in het laatste geval deze slechts door één kan worden gevolgd Tenslotte clausule.

probeer / behalve

De probeer / behalve syntaxis is als volgt:

probeer: # probeer blokcode behalve: # behalve blokcode

Het lichaam van de proberen clausule bevat code die een uitzondering kan genereren, op voorwaarde dat als een uitzondering werd gegenereerd, alle instructies in het blok worden overgeslagen. Aan de andere kant, het lichaam van de behalve clausule heet de uitzondering handler, zoals het wordt gebruikt om de uitzondering te vangen. De behalve blokcode wordt alleen uitgevoerd als er een uitzondering is gegenereerd, anders wordt het blok overgeslagen. U kunt ingebouwde uitzonderingen gebruiken zoals weergegeven in de Python-standaardbibliotheek. 

Laten we een voorbeeld nemen om dingen duidelijker te maken. Stel dat ons werd gevraagd een noemer in te vullen in een divisieformule. Omdat delen door nul niet is toegestaan, laten we een a schrijven probeer / behalve verklaring die controleert of er een verdeling is door nul en een bericht afdrukt als deze fout is opgetreden.

noemer = invoer ('Voer een noemer in:') try: formula = 15 / noemer print 'Het resultaat is' + str (formule) behalve ZeroDivisionError: print 'U probeerde te delen door nul, wat niet is toegestaan' 

Als u de waarde invoert 5, bijvoorbeeld, zou je de volgende output krijgen:

Het resultaat is 3

Probeer nu de waarde in te voeren 0 als invoer. Welke uitvoer krijgt u in dit geval??

proberen / eindelijk

proberen / eindelijk is een andere manier om de try-instructie in Python te schrijven. Tenslotte clausules worden genoemd clean-up / beëindiging clausules omdat ze altijd moeten worden uitgevoerd ongeacht of er een uitzondering is opgetreden in de proberen blok.

Laten we het voorbeeld in het bovenstaande gedeelte proberen, maar met de Tenslotte clausule:

noemer = invoer ('Voer een noemer in:') try: formula = 15 / noemer print 'Het resultaat is' + str (formule) eindelijk: print 'U probeerde te delen door nul wat niet is toegestaan' 

Merk op dat wanneer u de waarde invoert 5 als invoer krijgt u bijvoorbeeld de volgende uitvoer:

Het resultaat is 3 U probeert te delen door nul, wat niet is toegestaan

Het zoekwoord verhogen

De verhogen trefwoord is een andere manier om uitzonderingen in Python af te handelen. In dit geval kunt u uw eigen uitzonderingen verhogen, dat zijn uitzonderingen die worden gemeld wanneer een probleem buiten de verwachte fouten valt.

Laten we een voorbeeld bekijken van het gebruik van de verhogen sleutelwoord om het concept meer te begrijpen.

probeer: x = invoer ('Voer een cijfer in in het bereik 1-10:') als x<1 or x>10: verhoog Uitzonderingsdruk 'Geweldig! Je hebt naar mij geluisterd en een geldig nummer ingevoerd 'behalve: afdrukken' Je nummer lijkt buiten het bereik van 1-10 te liggen

Als u in dit voorbeeld een nummer invoert dat buiten het toegestane bereik valt, kunt u het afdrukken verklaring in de behalve blok zal worden uitgevoerd.

Ga je gang, probeer een aantal waarden en controleer de uitvoer.

De traceback-module

Python's herleiden module is een andere manier om uitzonderingen in Python af te handelen. Het wordt in feite gebruikt om stapelsporen van een programma af te drukken nadat er een uitzondering is opgetreden. De herleiden bevat de foutmelding, het nummer van de regel die de fout veroorzaakte, en de oproepstapel, dat is de volgorde van de functieaanroepen die tot de fout hebben geleid.

Laten we een voorbeeld nemen dat een a genereert herleiden:

def createException (name): verhoog Uitzondering ('Het lijkt erop dat' + naam + 'een uitzondering heeft verhoogd') createException ('Abder')

Als u dit script uitvoert, krijgt u een uitvoer die er als volgt uitziet:

Traceback (meest recente oproep laatste): bestand 'test.py', regel 4, in  createException ('Abder') Bestand 'test.py', regel 2, in createException raise Exception ('Het lijkt erop dat' + naam + 'een uitzondering heeft gemaakt') Uitzondering: Abder heeft een uitzondering gemaakt

Merk op dat de fout (fout) is opgetreden lijn 2 in de createException functie. Merk ook op dat de call stack ons ​​kan helpen bij het volgen welke oproep tot de fout leidde, wat in dit geval de oproep is die plaatsvond regel 4.

De tutorial wordt langer en ik wil op dit punt stoppen. Zoals je hebt gezien, is het debuggen van programma's echt een normaal en normaal ding om te doen, en ik geloof dat de soorten fouten die je in deze tutorial zag, bekend voorkomen, nietwaar?

Er zijn andere manieren om een ​​Python-programma te debuggen en uitzonderingen op te lossen. Een bekende manier is bijvoorbeeld de bewering

Gelukkig debuggen!