Buggar

Det hör till undantaget att de program du bygger redan från början fungerar, och dessutom fungerar precis som du tänkt sig. Oftast råkar du ut för felmeddelanden innan du ens lyckas starta programmet eller när progammet kört en stund. I bland händer det att programmet i någon
mening fungerar, men att det gör något annat än det du ville från början. Vi ska fundera lite kring vad som kan gå fel och vad du kan göra åt det.

Syntaxfel

Python får inte se ut hur som helst. Det finns en hel del regler och bryter du mot dessa regler så
fattar inte Python vad du menar. Antag att du skriver prnt i stället för print till exempel…

 >>> prnt "hello, world"
 File "", line 1
 prnt "hello, world"
 ^ SyntaxError: invalid syntax
 >>>

Pythontolken fattar inte vad prnt är för något, skrikerut sin förtvivlan och försöker så gott den kan peka utvar felet finns. Lösning: Se till att skriva rätt och håll koll på de små fjuttiga detaljerna. Å andra sidan är de här felen de lättaste att hitta och du får helt enkelt inte igång programmet innan du har fixat alla fel av det här slaget.

Programkörningsfel

Ibland händer det saker i programmet som inte går att hantera. Du försöker dividera med noll, öppna en fil som inte finns eller någonting liknande. Programraderna i sig är korrekt formulerade, men ändå leder de till orimligheter som Python måste protestera mot.

 >>> tal = 0
 >>> print 7 / tal
 Traceback (most recent call last):
 File "", line 1, in ?
 ZeroDivisionError: integer division or modulo by zero
 >>>

Satsen print 7 / tal är i sig helt korrekt, men just när variabeln tal råkar ha värdet 0 så fungerar det inte eftersom division med noll är en otillåten matematisk operation.
Lösning: Det finns en del lite mer avancerade sätt att ta hand om felsituationer, men så länge får du helt enkelt tänka igenom dina program så att de uppkommer så sällan som möjligt.

Tankefel

De här felen är klurigast. Programmet fungerar. Du får inga felmeddelanden, det är bara det att programmet inte gör riktigt som du vill. Ofta handlar det om att testa programmet med många olika slag av data, men sådana här fel kan hänga kvar länge också i välkända kommersielal program.

Ett vanligt tankefel är att man gör en evig loop det vill säga en loop som får programmet att hänga
sig och fortsätta göra samma sak tills du trycket på [Ctrl]+[C] eller stoppar programmet på ännu mer drastiskt sätt.

 >>> while True:
 ... print 'hello'
 ...

I programexemplet ovan förblir True sant i all evighet, varför satsen print ‘hello’ upprepas i oändlighet. Mer bedrägligt är det om det som görs i loopen inte syns utan bara suger datorkraft. Förr i tiden var det något av en dödssynd att skriva program med evighetsloopar eftersom de sög i sig datakraft som andra användare på datorn hade behövt.

Numera kan man säga att synden straffar sig själv eftersom de flesta sitter på en egen
burk och hackar. Ett bra sätt att hitta tankefelen är att lägga in printsatser här och där. Dels kan du använda dem för att se hur långt i programmet du kommer, dels kan du skriva ut variabelvärden, så att du kan se om de förändras på rätt sätt. När du hittat felen sätter du bara en ”brädgård” framför printsatserna.

Ett annat vanligt tankefel är att man stavar fel till ett
variabelnamn, så att resultatet inte blev som du föreställde dig

 >>> apa = 0
 >>> Apa = 345*978
 >>> Apa = Apa * 99
 >>> print apa
 0

Antag till exempel att du definierar variabeln apa och så börjar du göra beräkningar med den och plötsligt stavar den med stort A. Apa och apa är helt olika variabler, men det är inte så lätt att tänka på i alla lägen…

Detektivarbete

Att leta buggar är ett spännande detektivarbete. Räkna med att du får hålla på att testa, rätta, testa och rätta igen ett ganska långt tag efter att du har skrivit programmet ”färdigt”. Läs felmeddelandena och försök lära dig att tolka dem. Tänk på att felet ibland kan ligga flera rader före den rad där programmet slutligen hänger sig.

Screenshot from 2013-04-11 19:54:58

Finns det ett fel nånstans här?

Uppgift

Har du inte sett nog med felmeddelanden redan kan du skriva några små programsnuttar där du med flit har lagt in olika typer av fel, så att du får lite erfarenhet av vad som händer. Det händer knappast något farligt så det är bara att experimentera!

Annonser