Was ist Fehlerbehandlung?
Teil des Abschnitts Logik & Ablaufsteuerung der GDScript-Journey von Coddy. Lektion 66 von 78.
Ein Programm kann wegen eines Fehlers mitten in der Ausführung anhalten. Dieser Code fragt den Slot 5 eines Arrays ab, das nur drei Elemente hat:
var inventory := ["sword", "shield", "potion"]
var slot := 5
print(inventory[slot])
print("Done")Godot meldet Out of bounds get index '5', und die Funktion hält in dieser Zeile an, sodass Done nie ausgegeben wird. Dies ist ein Laufzeitfehler: Der Code ist gültig, aber ein Wert, den er während der Ausführung erhält, macht es unmöglich, eine Zeile auszuführen.
Die Laufzeitfehler, denen du am häufigsten begegnest, sind:
- eine ganze Zahl durch null zu teilen, wie bei
10 / count, wenncount0ist (dasselbe gilt für%) - mit eckigen Klammern auf einen fehlenden Schlüssel zuzugreifen, wie bei
player["mana"] - ein Index außerhalb des Arrays, wie beim obigen
inventory[5]
Python und Java können einen Fehler abfangen, nachdem er auftritt, mit try und except oder catch. GDScript kennt keine Ausnahmen und kein try. Fehlerbehandlung in GDScript bedeutet, die Werte vor der Zeile zu überprüfen, die fehlschlagen könnte, und zu entscheiden, was stattdessen zu tun ist:
if slot >= 0 and slot < inventory.size():
print(inventory[slot])
else:
print("Slot ", slot, " is empty")Die Prüfung benötigt beide Teile. Ein negativer Index wie -1 ist kein Fehler: Er liest vom Ende des Arrays aus, was nicht der Bedeutung einer Slotnummer entspricht.
Wenn der Fehler innerhalb einer aufgerufenen Funktion auftritt, wird diese Funktion beendet und gibt einen leeren Wert zurück, etwa 0 oder null, und der Aufrufer fährt mit diesem falschen Wert fort. Manche Fehler führen zu einem falschen Wert, ohne dass ein Fehler auftritt: int("abc") ist 0.
Aufgabe
EinfachDas Array inventory hat vier Plätze, die ab 0 nummeriert sind. Das Programm liest eine Eingabezeile: eine Platznummer (eine ganze Zahl, möglicherweise negativ).
Wenn der Platz existiert, gib Slot , die Nummer, : und den Gegenstand aus. Für die Eingabe 2 lautet die Ausgabe:
Slot 2: potionAndernfalls gib Slot , die Nummer und is empty aus. Für die Eingabe 7 lautet die Ausgabe:
Slot 7 is emptyEine negative Zahl ist niemals eine Platznummer: Für -1 gib Slot -1 is empty aus. Das Programm darf niemals mit einem Fehler beendet werden.
Probier es selbst
extends Node
func _ready():
var inventory := ["sword", "shield", "potion", "bow"]
var slot := int(OS.read_string_from_stdin())
# Gib den Gegenstand im Slot aus oder gib an, dass der Slot leer ist
pass
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablaufsteuerung
1Strings im Detail
String-MethodenIn Strings suchenErsetzen und TrimmenAufteilen und ZusammenfügenRückblick – Benutzernamen prüfen4Wörterbücher Teil 2
Verschachtelte WörterbücherArrays aus WörterbüchernWörterbücher zusammenführenWörterbücher kopierenWiederholung – Häufigkeitszähler10Fortgeschrittene Funktionen
Mehrere Werte zurückgebenLambda-Funktionen Teil 1Lambda-Funktionen Teil 2Wiederholung – Sortieren mit LambdaRekursive Funktionen Teil 1Rekursive Funktionen Teil 2Wiederholung – Verschachteltes Array summieren13Inventarverwaltungssystem
ProjektübersichtArtikel hinzufügen2Fortgeschrittene Entscheidungsfindung
Match mit VariablenMatch-GuardsArray-MusterDictionary-MusterMitgliedschaftsprüfungenRückblick – Befehlsparser5Kontaktbuch-Anwendung
Menü anzeigenKontakt hinzufügen8Schülerdatenverwaltung
ProjektübersichtSchüler hinzufügen3Mehrdimensionale Arrays
Grundlagen zu 2D-ArraysAuf Elemente in 2D-Arrays zugreifenVerschachtelte Schleifen mit 2D-ArraysWiederholung – 2D-ArraysGezackte ArraysGängige Muster für 2D-ArraysWiederholung – Spielbrett6Mengen mit Dictionaries
Was ist eine Menge?Dictionary als MengeHinzufügen und EntfernenVereinigung und SchnittmengeMengendifferenzWiederholung – Duplikate entfernen9Fortgeschrittene Datenaggregation
Werte summierenMinimum und Maximum findenBenutzerdefiniertes SortierenRückblick – Wörterbuch-Sortierer12Einfache Fehlerbehandlung
Was ist Fehlerbehandlung?Eingaben validierenGuard ClausesFehlercodes zurückgebenRückblick – Sichere DivisionÜbe selbstständig: Online-GDScript-Compiler