raise # Приклад 1
raise "Виникла помилка" # Приклад 2
raise ArgumentError # Приклад 3
raise ArgumentError, "Невірні дані" # Приклад 4
raise ArgumentError.new("Невірні дані") # Приклад 5
raise ArgumentError, "Невірні дані", caller[0] # Приклад 6raise - не зарезервоване слово,
а метод модуля Kernel (fail)
2 - RuntimeError
6 - "filename:line:in 'method'" в масиві caller
begin
x = Math.sqrt(y/z)
# ...
rescue ArgumentError
puts "Виникла помилка про вичислені кореня."
rescue ZeroDivisionError
puts "Спроба ділення на нуль."
end
begin
x = Math.sqrt(y/z)
# ...
rescue => err
puts err
enderr - Перехоплює всі виключення від класу StandartError
begin
# Код, в якому може виникнути помилка...
rescue Type1
# ...
rescue Type2
# ...
else
# Інші виключення...
end
begin
# Код, в якому може виникнути помилка...
rescue
# Пробує відновити...
retry # Пробує ще раз.
endbegin
# Код, в якому може виникнути помилка...
rescue
# Пробує відновити...
ensure
# Цей код виконається в будь-якому випадку.
end
x = a/b rescue puts("Ділення на нуль!")
def some_method
# Код...
rescue
# Відновлення після помилки...
endText
Exception
NoMemoryError
ScriptError
LoadError
NotImplementedError
SyntaxError
SignalException
Interrupt
StandardError
ArgumentError
IOError
EOFError
IndexError
LocalJumpError
NameError
NoMethodError
RangeError
FloatDomainError
RegexpError
RuntimeError
SecurityError
SystemCallError
SystemStackError
ThreadError
TypeError
ZeroDivisionError
SystemExit
fatalclass ApplicationController < ActionController::Base
rescue_from User::NotAuthorized, with: :deny_access # self defined exception
rescue_from ActiveRecord::RecordInvalid, with: :show_errors
rescue_from 'MyAppError::Base' do |exception|
render xml: exception, status: 500
end
protected
def deny_access
...
end
def show_errors(exception)
exception.record.new_record? ? ...
end
end
# Add this in your config/routes.rb
match '*path', :to => 'application#routing_error'
# Add this to your application_controller.rb
def routing_error(error = 'Routing error', status = :not_found, exception=nil)
render_exception(404, "Routing Error", exception)
end# config/environments/production.rb
...
config.consider_all_requests_local = false
...
config.exceptions_app = -> (env) { ExceptionsController.action(:error).call(env) }
...
# views/exceptions/error.html.haml
...
= @status
= @name
= @message
...