Radek
Radek

Reputation: 11091

How to "ignore" caught exceptions?

I use rufus scheduler to run overnight test scripts by calling my functions.

Sometimes I can see "scheduler caught exception:" a message that threw some of my functions. Then scheduler stops execution of following test cases.

How can I make it so scheduler runs all test cases regardless of any exception caught?

Upvotes: 15

Views: 10518

Answers (2)

Sergio Tulentsev
Sergio Tulentsev

Reputation: 230286

This is called "exception swallowing". You intercept an exception and don't do anything with it.

begin
  # do some dangerous stuff, like running test scripts
rescue => ex
  # do nothing here, except for logging, maybe
end

If you do not need to do anything with the exception, you can omit the => ex:

begin
  # do some dangerous stuff, like running test scripts
rescue; end

If you need to rescue Exceptions that don't subclass from StandardError, you need to be more explicit:

begin
  # do some dangerous stuff, like running test scripts
rescue Exception
  # catches EVERY exception
end

Upvotes: 19

vgoff
vgoff

Reputation: 11313

I will sometimes use the fact that you can pass blocks to a method, and I have the method rescue errors, and my code can continue on its way.

def check_block                                
  yield                                        
rescue NoMethodError => e                      
   <<-EOR
     Error raised with message "#{e}".        
     Backtrace would be #{e.backtrace.join('')}
   EOR
end    

puts check_block {"some string".sort.inspect}
puts check_block {['some', 'array'].sort.inspect}

This first block will go through and rescue with a report returned, the second will operate normally.

This rescue only rescues NoMethodError while you may need to rescue other errors.

Upvotes: 2

Related Questions