begin and rescue let a program handle an error path and keep running.

rescue A `rescue` block runs when code inside `begin` raises an exception.

Begin Rescue

raw_count
begin_rescue.rb
Replay: real traced execution (multi-file project)
raw_count = "4"

begin
  count = Integer(raw_count)
  result = 12 / count
  puts "count=#{count}"
  puts "result=#{result}"
rescue ArgumentError
  puts "count=invalid"
rescue ZeroDivisionError
  puts "count=zero"
end

puts "done"
raw_count = "0"

begin
  count = Integer(raw_count)
  result = 12 / count
  puts "count=#{count}"
  puts "result=#{result}"
rescue ArgumentError
  puts "count=invalid"
rescue ZeroDivisionError
  puts "count=zero"
end

puts "done"
raw_count = "oops"

begin
  count = Integer(raw_count)
  result = 12 / count
  puts "count=#{count}"
  puts "result=#{result}"
rescue ArgumentError
  puts "count=invalid"
rescue ZeroDivisionError
  puts "count=zero"
end

puts "done"
  1. raw_count ← 4, count ← 4, result ← 3

    1raw_count→ 4 = "4"  #@raw_count="0", "oops"23begin4  count→ 4 = Integer(raw_count4)5  result→ 3 = 12 / count46  puts "count=#{count4}"7  puts "result=#{result3}"8rescue ArgumentError9  puts "count=invalid"10rescue ZeroDivisionError11  puts "count=zero"12end1314puts "done"
    outputcount=4
    result=3
    done
  1. raw_count ← 0, count ← 0

    1raw_count→ 0 = "0"23begin4  count→ 0 = Integer(raw_count0)5  result = 12 / count06  puts "count=#{count}"7  puts "result=#{result}"8rescue ArgumentError9  puts "count=invalid"10rescue ZeroDivisionError11  puts "count=zero"12end1314puts "done"
    outputcount=zero
    done
  1. raw_count ← oops

    1raw_count→ oops = "oops"23begin4  count = Integer(raw_countoops)5  result = 12 / count6  puts "count=#{count}"7  puts "result=#{result}"8rescue ArgumentError9  puts "count=invalid"10rescue ZeroDivisionError11  puts "count=zero"12end1314puts "done"
    outputcount=invalid
    done