begin / rescue
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 44 z 56.
Aby wyjątek nie powodował awarii programu, umieść ryzykowny kod w bloku begin ... rescue ... end. Jeśli cokolwiek w bloku begin zgłosi wyjątek, Ruby przejdzie do pasującego bloku rescue zamiast przerwać działanie programu.
begin
result = 10 / 0
puts result
rescue ZeroDivisionError
puts "Cannot divide by zero!"
end
# Nie można dzielić przez zero!Możesz pobrać sam obiekt wyjątku za pomocą => e i odczytać jego .message:
begin
Integer("hello")
rescue ArgumentError => e
puts "Bad input: #{e.message}"
end
# Nieprawidłowe dane wejściowe: nieprawidłowa wartość dla Integer(): "hello"Jeśli nie podasz nazwy klasy wyjątku, samo rescue przechwytuje StandardError i jego klasy pochodne, czyli większość codziennych błędów. Przechwytywanie jest najbardziej przydatne, gdy możesz coś zrobić w bloku rescue: podstawić wartość domyślną, zapisać problem w dzienniku lub ponownie zapytać użytkownika.
Wyzwanie
ŁatwyWczytaj dwa wiersze z wejścia; oba powinny zawierać liczby całkowite, ale druga wartość może być nieprawidłową liczbą.
Owiń parsowanie drugiego wiersza w begin / rescue:
- Użyj
Integer(input)(które zgłaszaArgumentErrordla nieprawidłowego ciągu znaków) - Jeśli parsowanie się powiedzie, wypisz
Sum: <a + b> - Jeśli się nie powiedzie, wypisz
Bad number!
Dla wejścia 3, a następnie 4, wynikiem jest Sum: 7. Dla 3, a następnie abc, wynikiem jest Bad number!.
Spróbuj swoich sił
a = gets.to_i
raw_b = gets.chomp
# TODO: użyj begin/rescue wokół Integer(raw_b); wypisz sumę lub dokładny tekst z instrukcji
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