ruby 208 lines · 3 tabs

Exception handling and error management

Sarah Mitchell Feb 2026
3 tabs
# Basic exception handling
begin
  result = 10 / 0
rescue ZeroDivisionError => e
  puts "Error: #{e.message}"
  result = nil
end

# Multiple rescue clauses
begin
  # Risky operation
  file = File.open('nonexistent.txt')
rescue Errno::ENOENT => e
  puts "File not found: #{e.message}"
rescue IOError => e
  puts "IO Error: #{e.message}"
rescue StandardError => e
  puts "Standard error: #{e.message}"
ensure
  # Always runs, even if exception occurs
  file&.close
end

# Rescue and retry
attempts = 0
begin
  attempts += 1
  # Network call that might fail
  response = HTTParty.get('https://api.example.com/data')
rescue Net::OpenTimeout, Net::ReadTimeout => e
  if attempts < 3
    sleep(2 ** attempts)  # Exponential backoff
    retry
  else
    raise  # Re-raise after max attempts
  end
end

# Inline rescue
value = risky_method rescue default_value
user = User.find(params[:id]) rescue nil

# Rescue in methods (implicit begin)
def fetch_user(id)
  User.find(id)
rescue ActiveRecord::RecordNotFound
  User.new(name: 'Guest')
end

# Raising exceptions
raise "Something went wrong"
raise ArgumentError, "Invalid argument"
raise ArgumentError.new("Invalid argument")

# Re-raising with modification
begin
  # Operation
rescue StandardError => e
  raise StandardError, "Failed: #{e.message}", e.backtrace
end
3 files · ruby Explain with highlit

Ruby's exception handling uses begin/rescue/ensure/end. I rescue specific exceptions before general ones. rescue catches exceptions; ensure runs cleanup code always. retry attempts operation again; raise re-raises exceptions. Custom exceptions inherit from StandardError. Multiple rescue clauses handle different error types. Exception messages and backtraces aid debugging. I use inline rescue for simple cases—value = risky_method rescue default_value. Rescue modifiers catch and suppress errors—useful but potentially dangerous. Exception handling enables graceful degradation. Proper error management improves robustness and user experience. Understanding Ruby's exception hierarchy guides rescue strategies.


Related snips

Share this code

Here's the card — post it anywhere.

Exception handling and error management — share card
Link copied