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:// | ||