D· AI-utvecklareprogrammering· ca 45 min· grundläggande — ändras sällan· verifierad 2026-09-20
Felsökning och debuggern
Kunna använda breakpoints, läsa stack traces och isolera ett fel systematiskt.
Förkunskaper
Intuition
Läs stack tracen nedifrån och upp. Understa raden är felet; ovanför står vägen dit. Den sista raden i din egen kod är nästan alltid där du ska börja.
Traceback (most recent call last):
File "cli.py", line 12, in main
resultat = trana(X, y) ← din kod
File "model.py", line 45, in trana
return X @ w ← din kod, här sker det
ValueError: matmul: mismatch (100,5) (4,) ← felet
Felet säger: X har 5 kolumner men w har 4 element. Nu vet du vad du letar efter.
Den systematiska metoden: reproducera → förminska → hypotes → test → ändra en sak.
Kod
# 1. Breakpoint — stanna och titta
def trana(X, y):
breakpoint() # kör programmet; du hamnar i pdb
return X @ w
# I pdb: p X.shape (visa) n (nästa rad) s (stega in) c (fortsätt) q (avsluta)
# 2. Kontroller som säger till direkt i stället för långt senare
assert X.shape[1] == len(w), f"X har {X.shape[1]} kolumner men w har {len(w)}"
# 3. Loggning i stället för print — går att stänga av och har nivåer
import logging
log = logging.getLogger(__name__)
log.debug("X=%s y=%s", X.shape, y.shape)
# 4. Halveringsmetoden i git när något slutade fungera
# git bisect start; git bisect bad; git bisect good <gammal-commit>
Förminska felet. Går det att reproducera med 5 rader data i stället för 50 000? Med en funktion i stället för hela programmet? Nio gånger av tio hittar du felet under förminskningen — innan du ens startat debuggern.
Behärskning innebär
- Läser en stack trace och hittar den relevanta raden
- Isolerar ett fel systematiskt i stället för att gissa
- Använder breakpoints
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Python-dokumentationen (PSF-licens) — PSF
- Python — pdb — PSF