gpt4 book ai didi

ruby - 如何使脚本在 ruby​​ 中的 'raise' 语句之后继续运行?

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:44 25 4
gpt4 key购买 nike

我正在检查日志文件中是否有任何错误消息。如果在日志文件中发现错误消息,那么我使用“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

最佳答案

你的救援声明看起来不对:

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并且不要将异常用作控制流。

延伸阅读

关于ruby - 如何使脚本在 ruby​​ 中的 'raise' 语句之后继续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com