【发布时间】:2012-11-13 10:14:36
【问题描述】:
我使用rufus scheduler 通过调用我的函数来运行夜间测试脚本。
有时我会看到“调度程序捕获异常:”这条消息引发了我的一些函数。然后调度程序停止执行以下测试用例。
我怎样才能让调度程序运行所有测试用例而不管捕获到任何异常?
【问题讨论】:
我使用rufus scheduler 通过调用我的函数来运行夜间测试脚本。
有时我会看到“调度程序捕获异常:”这条消息引发了我的一些函数。然后调度程序停止执行以下测试用例。
我怎样才能让调度程序运行所有测试用例而不管捕获到任何异常?
【问题讨论】:
这称为“异常吞咽”。你拦截了一个异常并且不做任何事情。
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
如果你需要拯救Exceptions that don't subclass from StandardError,你需要更明确:
begin
# do some dangerous stuff, like running test scripts
rescue Exception
# catches EVERY exception
end
【讨论】:
rescue-without-class 语法。
我有时会使用这样一个事实,即您可以将块传递给方法,并且我有方法救援错误,并且我的代码可以继续执行。
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,而您可能需要救援其他错误。
【讨论】: