[解決済み] RubyでCtrl-cをキャプチャする
質問
長い間稼働しているレガシーなrubyプログラムを渡されましたが、そのプログラムには数多くの
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
を通して
これらのそれぞれが処理しうる例外を一つ残らず追跡することなく (少なくともすぐには) 、私はまだ、時には Ctrl C .
そして、コードを追加するだけの方法でそうしたいと思います(既存の動作に影響を与えたり、実行中に別の方法で捕捉された例外を見逃したりしないように)。
[
Ctrl
C
はSIGINT、つまりSystemExitと同等と思われます。
SignalException.new("INT")
に相当すると思われます。
class SignalException < Exception
であるため、この問題が出てくるのです]。
私が書きたいコードは、次のようになります。
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
EDIT: このコードは、トラップしたい例外のクラスを正しく取得する限り、動作します。それは、以下のように SystemExit、Interrupt、または IRB::Abort のいずれかです。
どのように解決するのですか?
この問題は、Ruby のプログラムが終了するとき、そのプログラムは SystemExit . control-C が入力されると インタラプト . 両方とも システム終了 と 割り込み から派生したもので 例外 を使用している場合、例外処理によって終了または割り込みが停止してしまいます。 以下がその修正方法です。
可能な限り
rescue Exception => e
# ...
end
から
rescue StandardError => e
# ...
end
StandardErrorに変更できないものについては、例外を発生させ直してください。
rescue Exception => e
# ...
raise
end
または、最低でもSystemExitとInterruptを再レイズする。
rescue SystemExit, Interrupt
raise
rescue Exception => e
#...
end
カスタム例外を作成する場合は 標準エラー ではなく 例外 .
関連
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Rubyで文字列を小文字・大文字に変換する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Rubyのclass << selfイディオム
-
[解決済み] pythonの例外メッセージのキャプチャ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Gemfileでrubygemを指定するときの~>と>=の違いは何ですか?
-
[解決済み] rvm use 2.0.0 --default を実行すると、"Warning! PATH is not properly set up" と表示される。
-
[解決済み] Rubyで空のファイルを作成する:"touch "と同等?
-
[解決済み] Rubyでコンソールから入力を読み込む?
-
[解決済み] doブロックと中括弧{}の使い分け
-
[解決済み] Rubyで文字列が正規表現にマッチするかどうかをチェックする最も速い方法?
-
[解決済み] Rubyの配列で同じ文字列の要素をカウントする方法
-
[解決済み] 変数名を使ったRubyの正規表現
-
[解決済み] Rubyで、selectとmapを組み合わせたArrayメソッドはありますか?
-
[解決済み] FactoryGirlのbuildメソッドとcreateメソッドの違いは何ですか?