Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Łatwy

Wczytaj 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łasza ArgumentError dla 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
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