我使用rufus scheduler通过调用我的函数运行隔夜测试脚本。
有时我可以看到“调度程序捕获异常:”这条消息抛出了我的一些功能。然后调度程序停止执行以下测试用例。
如何使调度程序运行所有测试用例而不管捕获的异常是什么?
答案 0 :(得分:11)
这被称为“吞咽异常”。你拦截一个例外而不对它做任何事情。
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
答案 1 :(得分: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
,而您可能需要挽救其他错误。