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, gdycountwynosi0(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.
Wyzwanie
ŁatwyTablica 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: potionW przeciwnym razie wypisz Slot , numer i is empty. Dla danych wejściowych 7 wynikiem jest:
Slot 7 is emptyLiczba 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
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
1Łańcuchy znaków — zagadnienia zaawansowane
Metody łańcuchów znakówWyszukiwanie w łańcuchach znakówZastępowanie i przycinanieDzielenie i łączeniePodsumowanie — sprawdzanie nazwy użytkownika4Słowniki, część 2
Zagnieżdżone słownikiTablice słownikówŁączenie słownikówKopiowanie słownikówPodsumowanie – licznik częstotliwości7Typy wyliczeniowe
Czym jest typ wyliczeniowy?Definiowanie typu wyliczeniowegoWartości typu wyliczeniowegoTypy wyliczeniowe w matchPowtórka – sygnalizacja świetlna10Zaawansowane funkcje
Zwracanie wielu wartościFunkcje lambda — część 1Funkcje lambda — część 2Powtórka — sortowanie za pomocą lambdaFunkcje rekurencyjne — część 1Funkcje rekurencyjne — część 2Powtórka — sumowanie zagnieżdżonej tablicy13System zarządzania zapasami
Omówienie projektuDodawanie produktu2Zaawansowane podejmowanie decyzji
Dopasowanie ze zmiennymiStrażnicy dopasowaniaWzorce tablicWzorce słownikówSprawdzanie przynależnościPowtórka — parser poleceń5Aplikacja książki kontaktów
Wyświetlanie menuDodawanie kontaktu8Menedżer danych studentów
Przegląd projektuDodaj studenta3Tablice wielowymiarowe
Podstawy tablic 2DDostęp do elementów tablic 2DPętle zagnieżdżone z tablicami 2DPodsumowanie — tablice 2DTablice postrzępioneTypowe wzorce tablic 2DPodsumowanie — plansza do gry6Zbiory ze słownikami
Czym jest zbiór?Słownik jako zbiórDodawanie i usuwanieSuma i część wspólnaRóżnica zbiorówPowtórka – usuwanie duplikatów9Zaawansowana agregacja danych
Sumowanie wartościZnajdowanie minimum i maksimumSortowanie niestandardowePodsumowanie – Sortownik słowników12Podstawy obsługi błędów
Czym jest obsługa błędów?Walidacja danych wejściowychKlauzule ochronneZwracanie kodów błędówPodsumowanie — bezpieczne dzieleniePoćwicz samodzielnie: Kompilator GDScript online