PythonPodcast 39 - itnett/FTD02H-N GitHub Wiki

Python Mentorkurs – Episode 4: Feilhåndtering, Debugging og Unntaksbehandling

Mentor: "Velkommen tilbake! I dag skal vi utforske en viktig del av programmering: Feilhåndtering og debugging. Det er uunngåelig at du vil støte på feil i koden din. Det skjer med alle programmerere, enten de er nybegynnere eller eksperter. Heldigvis har Python verktøy som hjelper deg med å håndtere feil på en ryddig måte. Vi skal også lære om unntak, som er Pythons måte å si fra på når noe går galt. La oss komme i gang!"


Hva er Feilhåndtering?

Mentor: "Feilhåndtering handler om å forutse mulige feil i koden og skrive kode som takler disse feilene uten å krasje hele programmet. Dette kan være alt fra å håndtere feil brukerinput til å sørge for at et program kan fortsette å kjøre selv om en fil ikke kan åpnes. I Python bruker vi try- og except-blokker til å håndtere slike situasjoner."


Unntak – Pythons Feilmeldinger

Mentor: "Et unntak er Pythons måte å si 'Hei, noe gikk galt her!'. Når Python støter på en situasjon som den ikke kan håndtere, kaster den et unntak (engelsk: exception). Hvis unntaket ikke blir håndtert, vil programmet stoppe. For eksempel, hvis du prøver å dele et tall på null, vil Python kaste et unntak."

print(10 / 0) # Vil gi en ZeroDivisionError

Mentor: "Dette vil gi en feil, fordi du ikke kan dele et tall på null. La oss se hvordan vi kan håndtere dette med try og except."


Bruke try og except

Mentor: "Når du bruker try, prøver Python å kjøre koden inni try-blokken. Hvis det oppstår en feil, vil Python hoppe over til except-blokken, der du kan håndtere feilen."

try: print(10 / 0) except ZeroDivisionError: print("Feil: Du kan ikke dele et tall på null.")

Mentor: "Nå vil ikke programmet krasje, men istedenfor skrive ut 'Feil: Du kan ikke dele et tall på null.'. Dette er en enkel måte å håndtere feil på, slik at programmet ditt kan fortsette å kjøre."


Generell Feilhåndtering

Mentor: "Du kan også bruke en generell except-blokk for å fange opp alle typer feil, ikke bare en spesifikk feil som ZeroDivisionError. Dette kan være nyttig hvis du ikke vet nøyaktig hvilken feil som kan oppstå."

try: print(10 / 0) except: print("Det oppsto en feil.")

Mentor: "Men vær forsiktig med å bruke generelle unntak! Det kan gjøre det vanskelig å finne ut hva som faktisk gikk galt. Derfor er det best å være så spesifikk som mulig."


Bruke finally

Mentor: "Noen ganger vil du forsikre deg om at noe skjer, uansett om det oppstår en feil eller ikke. For eksempel, hvis du åpner en fil, vil du være sikker på at filen alltid blir lukket, selv om noe går galt. Det er her finally-blokken kommer inn. Koden inni finally-blokken vil alltid bli kjørt."

try: fil = open("ikke_eksisterende_fil.txt", "r") except FileNotFoundError: print("Filen ble ikke funnet.") finally: print("Denne linjen vil alltid bli kjørt, uansett hva som skjer.")

Mentor: "Selv om filen ikke ble funnet, vil finally-blokken fortsatt bli kjørt. Dette er nyttig for å rydde opp ressurser, som å lukke filer eller avslutte databaser."


else-blokken

Mentor: "I tillegg til except og finally, har Python en else-blokk som kjører dersom ingen unntak oppstår i try-blokken. Dette kan være nyttig hvis du vil gjøre noe ekstra når alt går som planlagt."

try: result = 10 / 2 except ZeroDivisionError: print("Feil: Du kan ikke dele på null.") else: print(f"Resultatet er {result}") finally: print("Ferdig med divisjonen.")

Mentor: "I dette eksempelet vil else-blokken skrive ut resultatet dersom ingen feil oppstår, og finally vil alltid bli kjørt til slutt."


Debugging – Å Finne og Løse Feil i Koden

Mentor: "Debugging handler om å finne og rette feil i koden din. Selv erfarne programmerere gjør feil, så det er viktig å ha gode verktøy og teknikker for å finne ut hva som gikk galt. Noen enkle teknikker for debugging inkluderer å skrive ut verdiene til variabler med print() for å se hva som skjer underveis."

x = 10 y = 0 print(f"x = {x}, y = {y}") # Sjekk verdiene til x og y try: resultat = x / y except ZeroDivisionError: print("Feil: Deling på null.")

Mentor: "Her kan vi se hva verdiene til x og y er før vi prøver å dele, og dette hjelper oss med å identifisere problemet."


Bruke en Debugger

Mentor: "Selv om print()-basert debugging kan være nyttig, har Python mer avanserte verktøy, som en debugger. En debugger lar deg kjøre koden din linje for linje, slik at du kan se hva som skjer i hver linje og finne ut hvor en feil oppstår."

Slik bruker du en debugger:

I de fleste utviklingsmiljøer (IDEer) som PyCharm eller VS Code, kan du sette et 'breakpoint' i koden din.

Når du kjører koden med en debugger, vil programmet stoppe ved breakpoint, og du kan inspisere variabler, kjøre koden linje for linje, og finne feil.


Loggføring med logging-modulen

Mentor: "Et annet nyttig verktøy er loggføring. I stedet for å bruke print() for alt, kan du bruke logging-modulen til å logge viktige hendelser i programmet ditt. Dette gir mer kontroll over hva som skrives ut, og du kan bestemme loggnivåer som 'debug', 'info', 'warning', 'error', og 'critical'."

import logging

logging.basicConfig(level=logging.INFO) logging.info("Dette er en informasjonsmelding.")

Mentor: "Loggføring er spesielt nyttig når du jobber med større programmer og vil ha mer kontroll over hva slags informasjon du får underveis."


Oppsummering

Mentor: "I dag har vi lært hvordan vi kan håndtere feil ved hjelp av try, except, else, og finally. Vi har også snakket om debugging og hvordan vi kan bruke loggføring til å overvåke programmet vårt. Feilhåndtering er en essensiell ferdighet for alle som skriver kode, så husk å øve på dette!"


Praktisk Oppgave: Håndtere Feil i et Program

Mentor: "Nå er det din tur. Skriv et program som ber brukeren om å skrive inn to tall, deler det første tallet med det andre, og håndterer mulige feil som kan oppstå (for eksempel deling på null). Bruk try- og except-blokker til å håndtere feilene."


Mentor: "I neste episode skal vi dykke ned i filbehandling og mer avanserte datastrukturer som ordbøker og sett. Vi skal også se hvordan vi kan jobbe med store datasett og organisere data. Øv på feilhåndtering til neste gang, så sees vi!"


Denne episoden bygger videre på viktige programmeringsferdigheter og gir deltageren verdifull innsikt i feilhåndtering og debugging. Gjennom praktiske eksempler og oppgaver lærer deltageren å finne og håndtere feil på en trygg og effektiv måte.