Czym jest wyjątek?
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 43 z 56.
Gdy coś pójdzie nie tak w czasie wykonywania programu, na przykład przy dzieleniu przez zero, parsowaniu "abc" jako liczby całkowitej lub wywołaniu metody na nil, Ruby zgłasza wyjątek. Program zatrzymuje się, a Ruby wyświetla, co się stało i gdzie do tego doszło.
10 / 0
# ZeroDivisionError: dzielenie przez 0Każdy rodzaj błędu ma własną klasę. Oto kilka typowych:
ZeroDivisionError: dzielenie liczby całkowitej przez zeroArgumentError: nieprawidłowe argumenty przekazane do metody (Integer("abc"))
NoMethodError: wywołanie metody, której odbiorca nie ma (nil.upcase)TypeError: operacja na obiekcie niewłaściwego typu ("a" + 1)
Każda klasa wyjątku ma .message: czytelny dla człowieka opis, który Ruby wyświetla, gdy wyjątek nie zostanie obsłużony. W kolejnych lekcjach pokażemy, jak przechwytywać te wyjątki, aby program działał dalej.
Wyzwanie
PoczątkującyWczytaj jeden wiersz danych wejściowych — nazwę jednego wyrażenia w Ruby. Wypisz nazwę klasy wyjątku, który Ruby zgłosiłby dla tego wyrażenia. Użyj instrukcji case (nie musisz faktycznie zgłaszać wyjątku):
divide-by-zero→ZeroDivisionErrornil-method→NoMethodErrorbad-integer→ArgumentErrorwrong-type→TypeError- cokolwiek innego →
Unknown
Dla danych wejściowych nil-method wynikiem jest NoMethodError.
Spróbuj swoich sił
kind = gets.chomp
# TODO: case kind ... wypisz nazwę odpowiedniej klasy wyjątku
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 w szczegółach
Przegląd metod łańcuchów znakówInterpolacja łańcuchów znakówIterowanie po łańcuchach znakówDzielenie i łączeniePowtórka – Tkacz łańcuchów znaków4Bloki, procki i lambdy
Czym jest blok?do..end a nawiasy klamroweSłowo kluczowe yieldParametry blokuProcki i lambdyPodsumowanie — własny iterator7Hashe, część 2
Hash.new z wartościami domyślnymiIterowanie po haszachZagnieżdżone haszeŁączenie i przekształcaniePowtórka — licznik częstotliwości10Projekt – ewidencja uczniów
Przegląd projektuDodawanie ucznia5Potęga Enumerable
Select i RejectŁączenie wywołań mapReduce / Injectcount, all?, any?, none?group_by i partitionsort_by, min_by, max_byPodsumowanie — potok danych8Zaawansowane podejmowanie decyzji
case z klasami i wyrażeniami regularnymiwhen z wieloma wartościamiOperator trójargumentowyInline if / unlessPowtórka – klasyfikator ocen3Tablice 2D
Podstawy tablic 2DDostęp do elementów tablic 2DIterowanie po tablicach 2DTypowe wzorce 2DPowtórzenie – operacje na macierzach6Projekt – Menedżer biblioteki
Przegląd projektuDodaj książkę9Obsługa błędów
Czym jest wyjątek?begin / rescueWiele klauzul rescueensure i raisePodsumowanie — bezpieczny kalkulatorPoćwicz samodzielnie: Kompilator Ruby online