11

我使用rufus 调度程序通过调用我的函数来运行夜间测试脚本。

有时我会看到“调度程序捕获异常:”一条消息,它抛出了我的一些函数。然后调度程序停止执行以下测试用例。

我怎样才能让调度程序运行所有测试用例而不管捕获到任何异常?

4

2 回答 2

15

这称为“异常吞咽”。你拦截了一个异常并且不做任何事情。

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

如果您不需要对异常执行任何操作,则可以省略=> ex

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

如果您需要救援不从子类化的异常StandardError,您需要更加明确:

begin
  # do some dangerous stuff, like running test scripts
rescue Exception
  # catches EVERY exception
end
于 2012-11-25T22:46:22.140 回答
2

我有时会使用这样一个事实,即您可以将块传递给方法,并且我有方法救援错误,并且我的代码可以继续执行。

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}

第一个区块将通过救援并返回报告,第二个区块将正常运行。

此救援仅NoMethodError在您可能需要救援其他错误时进行救援。

于 2012-11-25T23:11:11.527 回答