簡體   English   中英

在ruby中的“ raise”語句之后,如何使腳本繼續運行?

[英]How to make script continues to run after 'raise' statement in ruby?

我正在檢查日志文件中是否有任何錯誤消息。 如果在日志文件中發現錯誤消息,那么我將使用“ raise”語句來報告創建情況。 但是,即使執行了“ rescue”,ruby在執行“ raise”語句后也會停止運行。 我希望腳本在“ 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

如果您搶救了異常並且不重新提出它,那么紅寶石將繼續存在。 您可以使用以下類似方法輕松地驗證這一點:

3.times do |i|
  begin
    raise "Raised from iteration #{i}"
  rescue => e
    puts e
  end
end

您將看到打印了三行輸出。

不過,作為一般慣例,除非要在運行時執行某些操作來糾正問題,否則應避免挽救Exception。 搶救而不是不拋出異常會在代碼中隱藏問題。

更一般地說,請遵循以上 Sergio的建議 ,不要將異常用作控制流。

進一步閱讀

您正在使用異常作為控制流機制。 別。

您想對不滿意的日志做什么? 打印嗎? 要歸檔嗎? 做到這一點,不要引發例外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM