2

我正在检查日志文件中是否有任何错误消息。如果在日志文件中发现错误消息,那么我使用 'raise' 语句来报告创建。然而,红宝石在执行“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
4

2 回答 2

7

您的救援声明看起来不正确:

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 的建议,不要使用异常作为控制流。

延伸阅读

于 2013-01-29T17:32:38.560 回答
3

您正在使用异常作为控制流机制。不。

你想用不愉快的日志做什么?打印它们?到一个文件,也许?这样做,不要引发异常。

于 2013-01-29T16:39:12.223 回答