Exceptions
| Raise | |
| Rescue | |
| Ensure always runs | |
| Your own error class |
Raise
The keyword raise stops the program with an error object. A plain string becomes a RuntimeError carrying that message. Naming a class with a message pinpoints the failure more precisely.
raise "boom"
raise ArgumentError, "bad input"
Left alone, either line ends the program and prints the message with a backtrace.
Rescue
The keywords begin and rescue wrap risky code: the rescue branch runs when the body raises. Naming an error class catches only that family, while other errors keep traveling upward. Match the class to the failures you truly expect.
begin
raise "boom"
rescue RuntimeError
puts "caught"
end
caught
Ensure always runs
The keyword ensure closes a begin block with cleanup that always runs: after success, after a rescued failure, and even when an unexpected error escapes. Closing files and releasing locks belongs there.
begin
raise "boom"
rescue RuntimeError
puts "caught"
ensure
puts "cleanup"
end
caught
cleanup
Your own error class
Subclassing StandardError defines an error type of your own, carrying the intent of the domain. Rescuing it by name keeps application failures apart from ordinary bugs. Give the class a clear name so future readers grasp the rescue at a glance.
class AppError < StandardError
end
begin
raise AppError, "nope"
rescue AppError
puts "app failed"
end
app failed
Next: Modules and mixins
Article author: Arthur Isaev