2

ログファイルにエラーメッセージがあるかどうかを確認しています。ログファイルでエラーメッセージが見つかった場合は、「raise」ステートメントを使用して創設を報告します。ただし、「rescue」を使用しても、「raise」ステートメントを実行すると、rubyは実行を停止します。スクリプトが「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

3 行の出力が表示されることがわかります。

ただし、一般的な慣行として、問題を修正するために実行時に何かを行う場合を除き、例外のレスキューを避ける必要があります。例外をレスキューし、再スローしないことで、コードの問題を隠すことができます。

より一般的には、上記の Sergio のアドバイスに従い、例外を制御フローとして使用しないでください。

参考文献

于 2013-01-29T17:32:38.560 に答える
3

制御フローメカニズムとして例外を使用しています。しないでください。

不幸なログで何をしたいですか?それらを印刷しますか?ファイルに、多分?そうして、例外を発生させないでください。

于 2013-01-29T16:39:12.223 に答える