2016-09-26 10 views
1

jRubyライブラリから例外を発生させ続けるコードがいくつか与えられました。コードは特定の例外のみを処理しますが、それは私が得るものを失います。Rubyでキャッチする例外を特定する方法

ライブラリコードを掘り下げることなく、特定の例外をキャプチャする方法がわかりますか?

+0

"[「レスキュー例外」の代替](http://stackoverflow.com/a/18596924/128421)」が関連しています。 –

答えて

3

例外がプログラムを終了させる時点で、と表示されます。例外の種類が発生しています。

次の例のIRBによって報告されるように、例えば、私は、例外のタイプを太字ている:

IRB(メイン):001:0> DEF do_it(B)終わり; do_it(3,4,5)
と、ArgumentError:引数の間違った数(IRB)から
   (3与えられたが、2の予想):1: `do_it」
   に(IRB)から1これに基づき
/Users/meagar/.rbenv/versions/2.3.1/bin/irb:11:in `」

から    、私はArgumentErrorを処理するために必要な知っているだろう。

すべて例外例外をキャッチして、例外ハンドラでデバッガを使用してキャッチされた例外を検査し、その型を特定して、catch-allを正しい例外の型に置き換えます。

+2

「Exception」という一般的な例外ではなく、特定の例外を捕まえたいということを強調して強調することが重要です。 Exceptionや裸の 'レスキュー 'が使われると、あらゆる種類の悪条件が緩んでしまうことがあります。 –

+0

[PokémonException Handling](http://programmers.stackexchange.com/questions/319088/is-iniscriminately-catching-exceptions-pokemon-exception-handling-ever-accept)は一般的に尋ねられますが、それは良い方法ですコードが生成しているどのようなタイプの例外を知っていて、それに対する応答を書きます。 'rescue => e'を実行し、' e.class'を調べて何が起きているのかを知る。 – tadman

+0

明らかではない場合は、catch-all **がコード**に残っていることを示唆していません。私は、デバッガを使って処理する例外の正しいタイプを判断し、 *正しいタイプのキャッチオール。 – meagar

関連する問題