Рубрики
Руби

Перехват исключения в при помощи Rescue

Чтобы назначить объект исключения для переменной, вы обычно используете специальный оператор => вместе с командой rescue. Объект исключения как и любой объект отвечает на сообщения. Особенно полезны backtrace и message методы

backtrace — возвращает массив из строки представляющую стек вызова в момент исключения. Имена методов, имена файлов и номера строк, показывающие полную дорожную карту кода, который был выполнен на пути к исключению. message возвращает строку сообщения, предоставленную для raise, если таковая имеется.

Например:

def fussy_method(x)
  raise ArgumentError, "I need a number under 10" unless x < 10
end


begin
  fussy_method(20)
rescue ArgumentError => e
  puts "That was not an acceptable number!"
  puts "Here's the backtrace for this exception:"
  puts e.backtrace
  puts "And here's the exception object's message:"
  puts e.message
endCode language: PHP (php)
# Вывод
That was not an acceptable number!
Here's the backtrace for this exception:
yield.rb:2:in `fussy_method'
yield.rb:7:in `<main>'
And here's the exception object's message:
I need a number under 10Code language: PHP (php)

backtrace показывает, что мы были в методе fussy_method в строке 2 файла fussy.rb, когда было вызвано исключение, и что ранее мы были в строке 6 того же файла в <main> контексте, другими словами, на верхнем уровне. программы (вне определения любого класса, модуля или метода). Сообщение “I need a number under 10” исходит из вызова метода raise внутри fussy_method

Метод rescue может также повторно вызвать исключение, которое его вызвало.

Читайте так же:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *