[英]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.