Menu
CoddyTech

Czym jest obsługa błędów?

Część sekcji Logika i przepływ programu ścieżki GDScript w Coddy. Lekcja 66 z 78.

Program może zatrzymać się w połowie działania z powodu błędu. Ten kod prosi o element tablicy o indeksie 5, mimo że tablica ma tylko trzy elementy:

var inventory := ["sword", "shield", "potion"]
var slot := 5
print(inventory[slot])
print("Done")

Godot zgłasza Out of bounds get index '5', a funkcja zatrzymuje się w tym wierszu, więc Done nigdy nie zostaje wyświetlone. To błąd czasu wykonywania: kod jest poprawny, ale wartość, którą otrzymuje podczas działania, sprawia, że wykonanie jednego wiersza jest niemożliwe.

Najczęściej spotykane błędy wykonania to:

  • dzielenie liczby całkowitej przez zero, jak w 10 / count, gdy count wynosi 0 (to samo dotyczy %)
  • odczyt brakującego klucza za pomocą nawiasów kwadratowych, jak w player["mana"]
  • indeks poza tablicą, jak w pokazanym wyżej inventory[5]

Python i Java mogą przechwycić błąd po jego wystąpieniu za pomocą try i except lub catch. GDScript nie ma wyjątków ani try. Obsługa błędów w GDScript polega na sprawdzaniu wartości przed linią, która może zakończyć się błędem, i decydowaniu, co zrobić zamiast tego:

if slot >= 0 and slot < inventory.size():
	print(inventory[slot])
else:
	print("Slot ", slot, " is empty")

Sprawdzenie wymaga obu części. Indeks ujemny, taki jak -1, nie jest błędem: odczytuje element od końca tablicy, co nie odpowiada znaczeniu numeru miejsca.

Gdy błąd wystąpi wewnątrz wywołanej przez Ciebie funkcji, ta funkcja zatrzymuje się i zwraca pustą wartość, taką jak 0 lub null, a funkcja wywołująca działa dalej z tą nieprawidłową wartością. Niektóre pomyłki powodują zwrócenie nieprawidłowej wartości bez żadnego błędu: int("abc") zwraca 0.

challenge icon

Wyzwanie

Łatwy

Tablica inventory ma cztery miejsca ponumerowane od 0. Program odczytuje jeden wiersz danych wejściowych: numer miejsca (liczbę całkowitą, która może być ujemna).

Jeśli miejsce istnieje, wypisz Slot , numer, : i element. Dla danych wejściowych 2 wynikiem jest:

Slot 2: potion

W przeciwnym razie wypisz Slot , numer i is empty. Dla danych wejściowych 7 wynikiem jest:

Slot 7 is empty

Liczba ujemna nigdy nie jest numerem miejsca: dla -1 wypisz Slot -1 is empty. Program nigdy nie może zakończyć działania z błędem.

Spróbuj swoich sił

extends Node

func _ready():
	var inventory := ["sword", "shield", "potion", "bow"]
	var slot := int(OS.read_string_from_stdin())

	# Wypisz przedmiot w slocie albo informację, że slot jest pusty
	pass
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator GDScript online