[解決済み] Rubyで「例外 => e」を救済するのはなぜ悪いスタイルなのですか?
質問
ライアン・デイビスの Ruby QuickRef と書いてあります(説明なし)。
エクセプションの救出はしないでください。EVER.でないと刺すぞ。
なぜダメなのか?何が正解なんだ?
どうすればいい?
TL;DR
: 使用方法
StandardError
の代わりに、一般的な例外をキャッチするために使用します。元の例外が再び発生した場合 (例: 例外をログに残すためだけのレスキューの場合)、レスキューの際に
Exception
は大丈夫でしょう。
Exception
のルートです。
Rubyの例外階層
というように
rescue Exception
から救出します。
すべて
のようなサブクラスも含まれます。
SyntaxError
,
LoadError
および
Interrupt
.
レスキュー
Interrupt
を使用することを防ぎます。
CTRL
C
をクリックしてプログラムを終了します。
レスキュー
SignalException
は、プログラムがシグナルに正しく反応しないようにします。によってのみ殺すことができるようになります。
kill -9
.
レスキュー
SyntaxError
というのは
eval
が失敗した場合、それは無言で行われます。
これらはすべて、このプログラムを実行し、次のように試してみることで示すことができます。
CTRL
C
または
kill
を使用します。
loop do
begin
sleep 1
eval "djsakru3924r9eiuorwju3498 += 5u84fior8u8t4ruyf8ihiure"
rescue Exception
puts "I refuse to fail or be stopped!"
end
end
から救出する。
Exception
はデフォルトでもありません。すること
begin
# iceberg!
rescue
# lifeboats
end
から救出することはできません。
Exception
から救出し
StandardError
. 一般的には、デフォルトの
StandardError
からの救出は
Exception
広げる
は、範囲を狭めるどころか、壊滅的な結果をもたらし、バグ探しを極めて困難なものにします。
からのレスキューを行いたい場合。
StandardError
で、例外を持つ変数が必要な場合、このフォームを使用することができます。
begin
# iceberg!
rescue => e
# lifeboats
end
と等価である。
begin
# iceberg!
rescue StandardError => e
# lifeboats
end
から救出するのがまともな数少ない一般的なケースの一つです。
Exception
はロギングやレポートのためで、その場合はすぐに例外を再レイズする必要があります。
begin
# iceberg?
rescue Exception => e
# do some logging
raise # not enough lifeboats ;)
end
関連
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] ルビースリープやディレイは1秒以下?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Node.jsの例外処理のベストプラクティス
-
[解決済み] RubyでBegin, Rescue, Ensure?
-
[解決済み】Rubyで配列を反復処理するための「正しい」方法は何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ActionController::UnknownFormat
-
[解決済み】Ruby:kind_of? vs. instance_of? vs. is_a?
-
[解決済み] Rubyのローカル変数が未定義である
-
[解決済み] Rubyのメソッド'to_sym'は何をするのですか?
-
[解決済み] Aptana Studio 3.6をWindowsにインストールできない
-
[解決済み] Rubyの除算はなぜ10進数ではなく整数を返すのですか?
-
[解決済み] RMagickのインストール。MagickWand.hが見当たりません。
-
[解決済み] マトリックスサムネーションチャレンジ
-
[解決済み] Ruby で PDF 文書を解析する
-
ERRORの問題を解決します。rails のインストール時に gem ネイティブ拡張のビルドに失敗しました。