-
Notifications
You must be signed in to change notification settings - Fork 4
6.2 How to Debug
Fehler sind ein natürlicher Teil des Entwicklungsprozesses. Sie zeigen uns, wo wir unsere Annahmen überprüfen und unseren Code verbessern müssen. In diesem Abschnitt werden wir lernen, wie man Fehler effektiv identifiziert, analysiert und behebt.
Lassen Sie uns ein einfaches Briefcase & Toga Programm erstellen, das absichtlich einige Fehler enthält. Erstellen Sie zunächst eine neue Briefcase-App:
briefcase new
Folgen Sie den Anweisungen und nennen Sie die App "BuggyApp". Öffnen Sie dann die Datei src/buggyapp/app.py
und ersetzen Sie den Inhalt durch folgenden Code:
# Fehler 1: Fehlender Import
# Dies ist ein häufiger Fehler. Wenn Sie eine Bibliothek oder ein Modul verwenden,
# aber vergessen, es zu importieren, erhalten Sie einen NameError.
# from toga.style.pack import COLUMN, ROW
import toga
from toga.style import Pack
class BuggyApp(toga.App):
def startup(self):
# Fehler 2: Verwendung eines nicht importierten Moduls
# Dies führt zu einem NameError, da COLUMN nicht definiert ist
main_box = toga.Box(style=Pack(direction=COLUMN))
name_label = toga.Label('Your name: ')
self.name_input = toga.TextInput()
button = toga.Button('Say Hello', on_press=self.say_hello)
main_box.add(name_label)
main_box.add(self.name_input)
main_box.add(button)
self.main_window = toga.MainWindow(title=self.formal_name)
self.main_window.content = main_box
self.main_window.show()
def say_hello(self, widget):
name = self.name_input.value
# Fehler 3: Falscher Zuweisungsoperator
# Dies ist ein SyntaxError. In Python wird '==' für Vergleiche verwendet,
# während '=' für Zuweisungen reserviert ist.
if name = "":
greeting = f"Hello, {name}!"
# Fehler 4: Fehlender Doppelpunkt
# Dies ist ein SyntaxError. In Python muss nach einem 'else' immer ein ':' folgen.
else
greeting = "Please enter your name."
# Fehler 5: Tippfehler im Variablennamen
# Dies führt zu einem NameError, da 'greting' nicht definiert ist.
# Solche Fehler sind oft schwer zu erkennen, besonders in größeren Codebasen.
self.main_window.info_dialog('Greeting', greting)
# Fehler 6: Inkonsistente Einrückung
# Dies würde einen IndentationError verursachen. Python verwendet Einrückungen
# zur Strukturierung des Codes, daher ist konsistente Einrückung entscheidend.
print("This line is incorrectly indented")
# Fehler 7: Unvollständige Funktion
# Dies würde einen IndentationError verursachen, da Python erwartet,
# dass eine Funktion mindestens eine Anweisung enthält.
def unfinished_function():
# Fehler 8: Falsche Methodensignatur
# Dies würde zu einem TypeError führen, da die Methode 'main' in der Klasse 'toga.App'
# keine Argumente erwartet, hier aber eines übergeben wird.
def main(unused_arg):
return BuggyApp('Buggy App', 'org.example.buggyapp')
if __name__ == '__main__':
main().main_loop()
Erklärungen zu den Fehlern:
-
Fehlender Import: Dies ist ein häufiger Fehler, besonders bei Anfängern. Wenn Sie ein Modul oder eine Klasse verwenden, ohne sie zu importieren, erhalten Sie einen
NameError
. -
Verwendung eines nicht importierten Moduls: Ähnlich wie Fehler 1, führt dies zu einem
NameError
. Es zeigt, wie wichtig es ist, alle benötigten Module korrekt zu importieren. -
Falscher Zuweisungsoperator: Ein klassischer
SyntaxError
. In Python wird==
für Vergleiche und=
für Zuweisungen verwendet. Dieser Fehler ist besonders tückisch, da er in manchen anderen Programmiersprachen kein Fehler wäre. -
Fehlender Doppelpunkt: Ein weiterer
SyntaxError
. In Python müssen bestimmte Anweisungen (wieif
,else
,for
,while
, etc.) mit einem Doppelpunkt enden. -
Tippfehler im Variablennamen: Dies führt zu einem
NameError
. Solche Fehler sind oft schwer zu finden, besonders in großen Codebasen. -
Inkonsistente Einrückung: Verursacht einen
IndentationError
. Python verwendet Einrückungen zur Codestrukturierung, daher ist korrekte Einrückung entscheidend. -
Unvollständige Funktion: Führt ebenfalls zu einem
IndentationError
. In Python muss jede Funktion mindestens eine Anweisung enthalten. -
Falsche Methodensignatur: Dies würde zu einem
TypeError
führen. Es zeigt, wie wichtig es ist, die Dokumentation der verwendeten Bibliotheken zu kennen und zu beachten.
Diese Fehler decken ein breites Spektrum häufiger Probleme ab, denen Entwickler begegnen können. Durch das Verstehen und Erkennen dieser Fehlertypen können Schüler ihre Fähigkeiten zur Fehlersuche und -behebung verbessern.
Versuchen Sie nun, die App zu starten:
briefcase dev
Sie werden mehrere Fehler sehen. Lassen Sie uns diese analysieren:
-
Syntaxfehler: Python wird einen SyntaxError in der Zeile
if name = "":
melden. Der korrekte Vergleichsoperator in Python ist==
, nicht=
. -
Einrückungsfehler: Nach dem
else
fehlt ein Doppelpunkt:
. Python verwendet Einrückungen zur Strukturierung des Codes, daher ist dies ein kritischer Fehler. -
Namenfehler: In der letzten Zeile der
say_hello
-Methode gibt es einen Tippfehler:greting
stattgreeting
.
Lassen Sie uns diese Fehler Schritt für Schritt beheben:
- Ändern Sie
if name = ""
zuif name == ""
. - Fügen Sie einen Doppelpunkt nach
else
hinzu:else:
. - Korrigieren Sie den Tippfehler: ändern Sie
greting
zugreeting
.
Eine einfache, aber effektive Methode zum Debuggen ist das Einfügen von Print-Anweisungen. Fügen Sie zum Beispiel folgende Zeile am Anfang der say_hello
-Methode hinzu:
print(f"Debug: Name eingegeben: {name}")
Für fortgeschritteneres Debugging und dauerhafte Aufzeichnungen können Sie das logging
-Modul verwenden. Fügen Sie am Anfang der Datei hinzu:
import logging
logging.basicConfig(level=logging.DEBUG, filename='app.log', filemode='w',
format='%(name)s - %(levelname)s - %(message)s')
Und in der say_hello
-Methode:
logging.debug(f"Name eingegeben: {name}")
Dies schreibt Debug-Informationen in eine Datei namens app.log
.
Fehler sind ein wichtiger Teil des Lernprozesses. Sie zeigen uns, wo wir unsere Fähigkeiten verbessern können. Mit der Zeit und mehr Erfahrung werden Sie in der Lage sein, komplexere Features zu entwickeln und weniger Fehler zu machen. Dennoch bleiben Fehler ein natürlicher Teil des Entwicklungsprozesses, selbst für erfahrene Programmierer.
Erinnern Sie sich:
- Lesen Sie Fehlermeldungen sorgfältig. Sie enthalten oft wertvolle Informationen über den Ort und die Art des Problems.
- Nutzen Sie Print-Anweisungen und Logging, um den Zustand Ihres Programms zu verschiedenen Zeitpunkten zu überprüfen.
- Machen Sie sich keine Sorgen über Fehler. Jeder Fehler ist eine Gelegenheit zu lernen und Ihren Code zu verbessern.
In zukünftigen Tutorials werden wir fortgeschrittenere Techniken zur Fehlervermeidung und zum Schreiben von robusterem Code kennenlernen. Bis dahin: Fürchten Sie sich nicht vor Fehlern, sondern nutzen Sie sie als Lernchancen!
Ein spannendes Video das von den berühmtesten und mit größten Bugs berichtet: