Debugging
Python bietet mehrere Möglichkeiten zum Debuggen: durch klassische Print-Ausgaben, durch das integrierte Debugging-Modul pdb oder mithilfe von Entwicklungsumgebungen wie Visual Studio Code (VS Code).
1 Debugging mit Print-Anweisungen
Dies ist die einfachste, aber oft sehr effektive Methode. Dabei werden Variablenwerte oder Kontrollflussinformationen mit print() ausgegeben.
def divide_numbers(a, b):
print('a:', a) # Wert von a ausgeben
print('b:', b) # Wert von b ausgeben
if b == 0:
print('Fehler: Division durch Null')
return None
return a / b
result = divide_numbers(10, 0)
print('Ergebnis:', result)
2 Debugging mit dem pdb-Modul
Das Modul pdb (Python Debugger) erlaubt schrittweises Durchlaufen des Codes mit interaktiver Steuerung.
2.1 Beispiel
import pdb
def greet_user(name):
pdb.set_trace() # Hier startet der Debugger
greeting = 'Hello ' + name
print(greeting)
greet_user('Anna')
2.2 Wichtige pdb-Kommandos
n: next – führt die nächste Zeile auss: step – springt in Funktionsaufrufe hineinc: continue – setzt das Programm bis zum nächsten Haltepunkt fortq: quit – verlässt den Debuggerp variable: gibt den Wert einer Variablen aus
3 Fehlerbehandlung mit try-except
Manche Fehler lassen sich nicht vermeiden, können aber abgefangen und behandelt werden.
def convert_to_int(value):
try:
return int(value)
except ValueError as e:
print('Ungültige Eingabe:', e)
return None
number = convert_to_int('abc')
print('Ergebnis:', number)
4 Verwendung von Loggern
4.1 Aus Standardbibliothek
4.1.1 Logging-Level
Wenn z. B. Log-Dateien erstellt werden sollen, in der nur Fehler oder kritische Ereignisse gespeichert werden sollen.
| Level | Beschreibung |
|---|---|
DEBUG | Detaillierte Debug-Informationen |
INFO | Nur zur Info: Dinge, die wie vorgesehen passiert sein |
WARNING | Wenn etwas Unerwartetes passiert ist, es hat jedoch nicht zu einem Absturz geführt hat |
ERROR | Schwerwiegender Fehler, der nicht zu einem Programmabsturz geführt hat (z. B. das Programm konnte eine bestimmte Funktion nicht ausführen) |
CRITICAL | Schwerwiegender, der zu einem Programmabsturz pgeführt hat |
Beispiel:
import logging
# Setup the logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Formatter (optional)
formatter = logging.Formatter(
'%(asctime)s:%(levelname)s:%(funcName)s:%(message)s',
)
# File handler
filepath = Path(__file__).parent.joinpath('log_standard.log')
file_handler = logging.FileHandler(filepath)
file_handler.setLevel(logging.INFO) # Info and higher will be logged
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
def divide_integers(a: int, b: int) -> float | None:
try:
logger.info(f'a={a}, b={b}')
result = a / b
return result
except ZeroDivisionError as e:
logger.exception(f'Exception was raised: {e}')
return None
def main() -> None:
for _ in range(3):
print(divide_integers(10, 0))
if __name__ == '__main__':
main()
Inhalt der erstellten Datei log_standard.log:
2025-03-22 12:05:07,716:INFO:divide_integers:a=10, b=0
2025-03-22 12:05:07,716:ERROR:divide_integers:Exception was raised: division by zero
Traceback (most recent call last):
File ".../logging_standard_lib--edit.py", line 28, in divide_integers
result = a / b
ZeroDivisionError: division by zero
[...]
4.2 Externer Logger
Ohne Boilerplate:
from loguru import logger
logger.debug("That's it, beautiful and simple logging!")
5 Debugging in Visual Studio Code (VS Code)
VS Code bietet eine sehr leistungsstarke Debugging-Umgebung mit grafischer Oberfläche.
5.1 Voraussetzungen
- Erweiterung “Python” von Microsoft muss installiert sein
- Eine Datei mit Python-Code geöffnet
5.2 Breakpoints setzen
- Links neben der Zeilennummer klicken, um einen roten Punkt (Haltepunkt) zu setzen
- Alternativ: F9 drücken bei ausgewählter Zeile
5.3 Debugging starten
- Run-Ansicht öffnen (links oder mit Strg+Shift+D)
- Auf ‘Start Debugging’ klicken oder drücke F5 drücken
- Man kann Variablen inspizieren, in den Code hineinschreiten (F11), darüber hinweg gehen (F10) oder zur nächsten Haltestelle springen (Shift+F5).
5.4 Variablen und Ausdrucksinspektion
- In der Debug-Seitenleiste unter “Variables” sieht man die aktuellen Werte.
- Im “Debug Console”-Fenster kann man Ausdrücke interaktiv testen.
5.5 Launch-Konfiguration anpassen
Erstelle eine Datei .vscode/launch.json, um z. B. Argumente zu übergeben:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Datei starten",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
6 Tipps für effektives Debugging
- Reproduzierbare Fehlerfälle schaffen
- Mit kleinen Datenmengen testen
- Unit Tests schreiben, um Fehler frühzeitig zu entdecken
- Kommentieren und Abschnitte temporär deaktivieren
- Code aufteilen in kleinere, testbare Funktionen