Rubyでエラーをキャッチするには、rescue
ステートメントを使用します。通常、このステートメントはbegin
とend
の間に発生します。ブロックの一部としてのrescue
ステートメント(do ... end
)またはメソッド(def ... end
)。私の質問は、他にどのような構造(ループ、while、if、...)があれば、その中に巣を救うのでしょうか?
レスキューを使用できるのは、次の2つの場合のみです。
以内 begin ... end
ブロック
begin
raise
rescue
nil
end
ステートメント修飾子として
i = raise rescue nil
関数、モジュール、およびクラス本体(Jörgに感謝)は暗黙的ですbegin...end
ブロックなので、明示的なbegin
/end
なしで任意の関数内でレスキューできます。
def foo
raise
rescue
nil
end
ブロック形式は、オプションのパラメーターのリストを取り、rescue
に対する例外(および子孫)を指定します。
begin
eval string
rescue SyntaxError, NameError => boom
print "String doesn't compile: " + boom
rescue StandardError => bang
print "Error running script: " + bang
end
ステートメント修飾子としてインラインで呼び出された場合、またはbegin
/end
ブロック内で引数なしで呼び出された場合、rescueは StandardError
とその子孫 をキャッチします。
これが rescue
に関する1.9のドキュメントです。