Exceptions and Safety
Raise Exception
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
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
requested ← 3
8requested→ 3 = 3 #@requested=0, 8910begin11 seats = seats_for(requested3)12 puts "seats=#{seats}"def seats_for(requested)
1def seats_for(requested3)2 raise ArgumentErrorArgumentError, "too small" if requested3 < 13 raise ArgumentErrorArgumentError, "too large" if requested3 > 645 requested36endseats ← 3
10begin11 seats→ 3 = seats_for(requested3)12 puts "seats=#{seats3}"13rescue ArgumentError => erroroutputseats=3
requested ← 0
8requested→ 0 = 0910begin11 seats = seats_for(requested0)12 puts "seats=#{seats}"def seats_for(requested)
1def seats_for(requested0)2 raise ArgumentErrorArgumentError, "too small" if requested0 < 13 raise ArgumentErrorArgumentError, "too large" if requested0 > 645 requested06endputs "error=#{error.message}"
13rescue ArgumentError => error14 puts "error=#{error.messagetoo small}"15endoutputerror=too small
requested ← 8
8requested→ 8 = 8910begin11 seats = seats_for(requested8)12 puts "seats=#{seats}"def seats_for(requested)
1def seats_for(requested8)2 raise ArgumentErrorArgumentError, "too small" if requested8 < 13 raise ArgumentErrorArgumentError, "too large" if requested8 > 645 requested86endputs "error=#{error.message}"
13rescue ArgumentError => error14 puts "error=#{error.messagetoo large}"15endoutputerror=too large