長期間実行されているレガシーRubyプログラムに合格しました。
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
それを通して。
これらが処理する可能性のあるすべての例外を(少なくともすぐにではなく)追跡することなく、で時々それをシャットダウンできるようにしたいと思いCtrlCます。
そして、私はコードに追加するだけの方法でそうしたいと思います(そのため、既存の動作に影響を与えたり、実行中に途中でキャッチされた例外を見逃したりしません)。
[ CtrlCはSIGINT、つまりSystemExitでありSignalException.new("INT")
、Rubyの例外処理システムと同等のようです。class SignalException < Exception
、これがこの問題が発生する理由です。]
私が書きたいコードは次のようになります:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
編集:このコードは、トラップする例外のクラスを正しく取得する限り機能します。これは、以下のようにSystemExit、Interrupt、またはIRB :: Abortのいずれかです。