我正在检查日志文件中是否有任何错误消息。如果在日志文件中找到错误消息,那么我使用'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
答案 0 :(得分:5)
您的救援声明看起来不正确:
rescue raise => error
应该是:
rescue => error
相当于:
rescue StandardError => error
如果你拯救了一个例外并且没有重新提起它,那么ruby会继续。您可以使用以下内容轻松验证:
3.times do |i|
begin
raise "Raised from iteration #{i}"
rescue => e
puts e
end
end
你会看到打印出三行输出。
作为一般做法,除非您在运行时要做一些事情来纠正问题,否则应该避免拯救例外。抢救而不是重新抛出异常可以隐藏代码中的问题。
更一般地说,请关注Sergio的advice above,不要将异常用作控制流程。
答案 1 :(得分:3)
您正在使用异常作为控制流机制。别。
你想用不快乐的日志做什么?打印出来?也许是一个文件?这样做,不要引发异常。