Wiele klauzul rescue
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 45 z 56.
Jeden blok begin może mieć kilka klauzul rescue. Ruby sprawdza je od góry do dołu i wykonuje pierwszą, której klasa wyjątku pasuje.
begin
number = Integer(gets.chomp)
result = 100 / number
puts result
rescue ArgumentError
puts "That's not a valid number."
rescue ZeroDivisionError
puts "Can't divide by zero."
endKolejność ma znaczenie: wymieniaj konkretne klasy przed ogólnymi. Umieszczenie StandardError na początku przechwyciłoby wszystko, a późniejsze gałęzie nigdy by się nie wykonały.
Możesz też obsłużyć wiele klas wyjątków w jednej gałęzi, wymieniając je po przecinkach:
begin
risky_call
rescue ArgumentError, TypeError => e
puts "Bad input: #{e.message}"
endUżyj tego, gdy kod odzyskiwania jest taki sam dla kilku trybów awarii.
Wyzwanie
ŁatwyOdczytaj dwa wiersze z wejścia, oba powinny zawierać liczby całkowite. Użyj Integer(...) dla obu, a następnie podziel pierwszą przez drugą.
Obsłuż trzy przypadki za pomocą osobnych gałęzi rescue:
ArgumentError→ wypiszBad number!ZeroDivisionError→ wypiszCannot divide by zero!TypeError→ wypiszWrong type!
Jeśli wszystko się powiedzie, wypisz Result: <a / b> (dzielenie całkowite).
Dla wejścia 10 / 2 wynikiem jest Result: 5. Dla 10 / 0 — Cannot divide by zero!. Dla 10 / abc — Bad number!.
Spróbuj swoich sił
raw_a = gets.chomp
raw_b = gets.chomp
# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
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