我正在检查日志文件中是否有任何错误消息.如果在日志文件中找到错误消息,那么我使用'raise'语句来报告创建.然而,ruby在执行'raise'语句后停止运行,即使我使用'rescue'.我希望脚本在'raise'语句后继续检查下一个日志文件是否有错误,但不确定如何.任何帮助,将不胜感激!
logs_all = s.sudo "egrep -i '#{error_message}' #{log_file}"
logs_all.each do |hostname, logs|
unless logs.empty?
puts line, "Unhappy logs on #{hostname}", line, logs
happy = false
end
begin
raise "Unhappy logs found! in #{log_file}" unless happy
rescue raise => error
puts error.message
end
end
Run Code Online (Sandbox Code Playgroud)
您的救援声明看起来不正确:
rescue raise => error
Run Code Online (Sandbox Code Playgroud)
应该:
rescue => error
Run Code Online (Sandbox Code Playgroud)
这相当于:
rescue StandardError => error
Run Code Online (Sandbox Code Playgroud)
如果你拯救一个例外并且不再重新提起它,那么ruby会继续.您可以通过以下方式轻松验证:
3.times do |i|
begin
raise "Raised from iteration #{i}"
rescue => e
puts e
end
end
Run Code Online (Sandbox Code Playgroud)
你会看到打印出三行输出.
但是,作为一般做法,除非您要在运行时执行某些操作以纠正问题,否则应避免挽救异常.抢救而不是重新抛出异常可以隐藏代码中的问题.
更一般地说,请遵循上面的 Sergio 建议,不要将异常用作控制流程.