raise reports invalid input from a method, and callers can rescue that error.

raise `raise` creates an exception when a method cannot safely continue.

Raise Exception

requested
raise_exception.rb
Replay: real traced execution (multi-file project)
def seats_for(requested)
  raise ArgumentError, "too small" if requested < 1
  raise ArgumentError, "too large" if requested > 6

  requested
end

requested = 3

begin
  seats = seats_for(requested)
  puts "seats=#{seats}"
rescue ArgumentError => error
  puts "error=#{error.message}"
end
def seats_for(requested)
  raise ArgumentError, "too small" if requested < 1
  raise ArgumentError, "too large" if requested > 6

  requested
end

requested = 0

begin
  seats = seats_for(requested)
  puts "seats=#{seats}"
rescue ArgumentError => error
  puts "error=#{error.message}"
end
def seats_for(requested)
  raise ArgumentError, "too small" if requested < 1
  raise ArgumentError, "too large" if requested > 6

  requested
end

requested = 8

begin
  seats = seats_for(requested)
  puts "seats=#{seats}"
rescue ArgumentError => error
  puts "error=#{error.message}"
end
  1. requested ← 3

    8requested→ 3 = 3  #@requested=0, 8910begin11  seats = seats_for(requested3)12  puts "seats=#{seats}"
  2. def seats_for(requested)

    1def seats_for(requested3)2  raise ArgumentErrorArgumentError, "too small" if requested3 < 13  raise ArgumentErrorArgumentError, "too large" if requested3 > 645  requested36end
  3. seats ← 3

    10begin11  seats→ 3 = seats_for(requested3)12  puts "seats=#{seats3}"13rescue ArgumentError => error
    outputseats=3
  1. requested ← 0

    8requested→ 0 = 0910begin11  seats = seats_for(requested0)12  puts "seats=#{seats}"
  2. def seats_for(requested)

    1def seats_for(requested0)2  raise ArgumentErrorArgumentError, "too small" if requested0 < 13  raise ArgumentErrorArgumentError, "too large" if requested0 > 645  requested06end
  3. puts "error=#{error.message}"

    13rescue ArgumentError => error14  puts "error=#{error.messagetoo small}"15end
    outputerror=too small
  1. requested ← 8

    8requested→ 8 = 8910begin11  seats = seats_for(requested8)12  puts "seats=#{seats}"
  2. def seats_for(requested)

    1def seats_for(requested8)2  raise ArgumentErrorArgumentError, "too small" if requested8 < 13  raise ArgumentErrorArgumentError, "too large" if requested8 > 645  requested86end
  3. puts "error=#{error.message}"

    13rescue ArgumentError => error14  puts "error=#{error.messagetoo large}"15end
    outputerror=too large