Catching general exceptions in Ruby

I was wondering how to catch exceptions of any kind in Ruby. Well You just use begin rescue pair, without specifying what kind of exceptions do You want to catch. This perfectly gets all exceptions. But when You want to use some information, like exception name written to user, You have to declare some variable. But what type? Well simplest solutions are not always obvious, at least for me ;-)

Use Exception class which is parent for all exception instances… Ughh been stuck on such easy thing is a shame :)

begin
   # code
   # code
rescue Exception => msg
   puts "Something went wrong ("+msg+")"
end

Update

2008-01-10

There is much better way to do this, omit Exception in rescue and it will catch all exceptions

begin
   # code
   # code
rescue => msg
   puts "Something went wrong ("+msg+")"
end

Comments

7 responses to “Catching general exceptions in Ruby”

  1. That’s useful thanks

    You should probably fix the spelling of ‘rescue’ though :-)

  2. Oh, indeed :) Fixed ;)

  3. The spelling is still wrong lol

  4. @asd
    Strange. Fixed it again (?)

  5. According to wikipedia (I know…), the update isn’t correct:

    It is a common mistake to attempt to catch all exceptions with a simple rescue clause. To catch all exceptions one must write:
    begin
    # Do something
    rescue Exception
    # don’t write just rescue — that only catches StandardError, a subclass of Exception
    # Handle exception
    end

    http://en.wikipedia.org/wiki/Ruby_(programming_language)#Exceptions

    J.

  6. Well, looks like You are right. But it is strange. I would swear I did tests before I wrote that. Anyway – rescue Exception => e is right way…

  7. capitale Avatar
    capitale

    the ruby way to interpolate strings like:
    “Something went wrong (“+msg+”)”
    is
    “Something went wrong (#{msg})”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.