Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
de:modul:m319:learningunits:lu08:logikfehler [2025/06/23 07:45] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | de:modul:m319:learningunits:lu08:logikfehler [2025/06/23 11:50] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden 20.171.207.61 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== LU08c - Logikfehler suchen ====== | ||
+ | <WRAP center round info 60%> | ||
+ | Logikfehler treten erst beim Ausführen meines Programms auf. | ||
+ | Das Programm produziert einen Absturz oder ein falsches Resultat. | ||
+ | </ | ||
+ | Im Gegensatz zu Syntaxfehlern zeigt mir meine IDE zunächst keinen Hinweis auf den fehlerhaften Code. | ||
+ | Ich muss solche Fehler zunächst erkennen, die Ursache ermitteln und beheben. | ||
+ | |||
+ | ===== Programmabsturz ===== | ||
+ | <WRAP center round info 60%> | ||
+ | Wenn ein Programm unerwartet beendet wird, sprechen wir von einem Absturz. | ||
+ | </ | ||
+ | |||
+ | Die meisten Programmabstürze geschehen, weil in einer Variable ein unerwarteter Wert steht: | ||
+ | * Die Variable hat (noch) gar keinen Wert. | ||
+ | * Eine Variable in einer Berechnung enthält Buchstaben (String) | ||
+ | * Das Programm will durch 0 dividieren | ||
+ | * ... | ||
+ | |||
+ | ==== Stack Trace ==== | ||
+ | Stürzt ein Programm ab, so erzeugt das System einen sogenannten **Stack Trace**. | ||
+ | Dieser Stack Trace enthält wichtige Angaben zur Suche nach der Ursache: | ||
+ | * Welche Ausnahme (Exception) ist aufgetreten. | ||
+ | * Welcher Befehl führte zur Exception. | ||
+ | * In welcher Codezeile ist die Exception aufgetreten. | ||
+ | * Die Hierarchie der Funktionen welche diesen Codeblock aufgerufen haben. | ||
+ | |||
+ | === Beispiel === | ||
+ | Ich führe mein Programm aus und gebe als gewüschten Betrag **13** ein. | ||
+ | |||
+ | <code python [enable_line_numbers=" | ||
+ | def main(): | ||
+ | |||
+ | input_string = input(" | ||
+ | amount = int(input_string) | ||
+ | give_bills(amount) | ||
+ | |||
+ | |||
+ | def give_bills(amount): | ||
+ | bills = [200, 100, 75, 25, 3] | ||
+ | index = 0 | ||
+ | while amount > 0: | ||
+ | if bills[index] > amount: | ||
+ | index += 1 | ||
+ | else: | ||
+ | print(str(bills[index]) + ' KD') | ||
+ | amount = amount - bills[index] | ||
+ | |||
+ | |||
+ | if __name__ == ' | ||
+ | main() | ||
+ | </ | ||
+ | |||
+ | Das Programm stürzt ab und zeigt mir diesen Stacktrace: | ||
+ | |||
+ | {{de: | ||
+ | |||
+ | Lesen Sie den Stacktrace von unten nach oben: | ||
+ | * Grün: '' | ||
+ | * Türkis: Der verursachende Befehl ist '' | ||
+ | * Gelb: Dieser Befehl steht in Zeile 12 in der Funktion '' | ||
+ | * Violett: '' | ||
+ | |||
+ | ---- | ||
+ | {{tag> | ||
+ | [[https:// |