Begin Rescue not catching error

18,739

Solution 1

rescue without a parameter just rescues exceptions that inherit from StandardError. To rescue a SyntaxError use rescue SyntaxError.

To rescue all exceptions you would use rescue Exception, but note that that's a bad idea (which is why it's not the default behavior of rescue) as explained here and here. Especially this part:

Rescuing Interrupt prevents the user from using CTRLC to exit the program.

Rescuing SignalException prevents the program from responding correctly to signals. It will be unkillable except by kill -9.

Solution 2

rescue without any parameter accepts exceptions raised by StandardError class. Your error type is SyntaxError which is inherited from a different class called ScriptError. All these error classes are subclasses of Exception class. So as sepp2k suggested use rescue Exception to catch all kinds of exceptions.

Share:
18,739

Related videos on Youtube

Schneems
Author by

Schneems

I Ruby, I Rails, I teach at UT Austin, I work @Heroku.

Updated on April 16, 2020

Comments

  • Schneems
    Schneems about 4 years

    I'm using some ruby code wrapped in a begin - rescue block but somehow it manages to still crash.

    the block of code looks like this:

    # Retrieve messages from server
    def get_messages
      @connection.select('INBOX')
      @connection.uid_search(['ALL']).each do |uid|
        msg = @connection.uid_fetch(uid,'RFC822').first.attr['RFC822']
        begin
          process_message(msg)
          add_to_processed_folder(uid) if @processed_folder
        rescue
           handle_bogus_message(msg)
        end
        # Mark message as deleted 
        @connection.uid_store(uid, "+FLAGS", [:Seen, :Deleted])
      end
    end
    

    Given this code i would assume that if process_message or add_to_processed_folder could not execute then rescue would kick in and call handle_bogus_message. That being said I'm running this code in a production environment and sometimes when i "get" an email message (this is run from a rake task) it dies with a SyntaxError.

    For a look at the error message check out http://pastie.org/1028479 and not that process_message that it is referring to is the same process_message above. Is there any reason why begin - rescue won't catch this exception?

  • oligan
    oligan almost 14 years
    The reason rescue doesn't rescue Exceptions by default is that they're usually regarded as too severe to rescue.