Чтобы назначить объект исключения для переменной, вы обычно используете специальный оператор => вместе с командой 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
end
Code 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 10
Code language: PHP (php)
backtrace показывает, что мы были в методе fussy_method в строке 2 файла fussy.rb, когда было вызвано исключение, и что ранее мы были в строке 6 того же файла в <main> контексте, другими словами, на верхнем уровне. программы (вне определения любого класса, модуля или метода). Сообщение “I need a number under 10” исходит из вызова метода raise внутри fussy_method
Метод rescue может также повторно вызвать исключение, которое его вызвало.
Читайте так же: