Menu
CoddyTech

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, wenn count 0 ist (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.

challenge icon

Aufgabe

Einfach

Das 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: potion

Andernfalls gib Slot , die Nummer und is empty aus. Für die Eingabe 7 lautet die Ausgabe:

Slot 7 is empty

Eine 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
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablaufsteuerung

Übe selbstständig: Online-GDScript-Compiler