Menu
Coddy logo textTech

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."
end

Kolejność 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}"
end

Użyj tego, gdy kod odzyskiwania jest taki sam dla kilku trybów awarii.

challenge icon

Wyzwanie

Łatwy

Odczytaj 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 → wypisz Bad number!
  • ZeroDivisionError → wypisz Cannot divide by zero!
  • TypeError → wypisz Wrong 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
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 Ruby online