Chapter 12 - Exceptions
Exercise 1: Rescuing Exceptions
The call to trip_over_curb raises an exception. Instead of allowing execution to halt, rescue the exception, and print the string "Caught you!".
def trip_over_curb
raise "WHOA!"
end
trip_over_curbHere’s the program output right now:
test.rb:2:in `trip_over_curb': WHOA! (RuntimeError)
from test.rb:5:in `<main>'When you’re ready, have a look at the solution.
Exercise 2: Handling the exception object
The call to send_sos raises an exception with a message containing some coordinates. Rescue the exception, and print “Sending rescue party to” followed by the coordinates in the exception message.
def send_sos
raise "Latitude -50.75, Longitude 166.04"
end
send_sosHere’s the output:
test.rb:2:in `send_sos': Latitude -50.75, Longitude 166.04 (RuntimeError)
from test.rb:5:in `<main>'When you’re ready, have a look at the solution.
Exercise 3: Handling multiple exception types
The call to random_failure raises either a ThisError, ThatError, or TheOtherError, randomly. Rescue ThisError, and print the message “I caught this!”. Rescue ThatError, and print “I caught that!”. Allow TheOtherError to fail normally.
class ThisError < StandardError
end
class ThatError < StandardError
end
class TheOtherError < StandardError
end
def random_failure
number = rand(0..2)
if number == 0
raise ThisError, "Whoops!"
elsif number == 1
raise ThatError, "Uh, oh!"
elsif number == 2
raise TheOtherError, "Oh, no!"
end
end
random_failureWhen you run your code repeatedly, you should see one of these three outputs:
I caught this!I caught that!test.rb:17:in `random_failure': Oh, no! (TheOtherError)
from test.rb:22:in `<main>'When you’re ready, have a look at the solution.