メソッド内のrescue
前ページまでは「begin...end
内のブロックで起こった例外を補足する」としてきましたが、メソッド定義内においてはその限りではありません。明示的に begin...end
を指定しない場合、メソッドのdef ... end
が捕捉対象ブロックとみなされます。
rescueした後に再度raiseしなおす
実用コードにおいては、rescueで例外を補足したものの、ある条件ではやはり例外を上げてプログラムを停止させるのが正しい(あるべき)処理である、というケースが考えられます。そのような処理は、rescue節の中で補足した例外オブジェクトを引数にしてもう一度raiseすることで実現されます。
後置rescue
実のところ、例外捕捉対象となるコードが1行の場合は、begin...end
および rescue 節を書く必要すらなく、if文のように後置記法のrescueを使うことが出来ます。例を見たほうがわかりやすいので、以下のコードを見てください。
value
には本来do_something
メソッドの返り値が入りますが、do_something
内で例外が起こった場合は後置rescueにより補足され、valueにはnilが束縛されることとなります。
以上
以上がRubyの例外処理の基本です。例外処理に関しては言語の「決め」が大きいので、他の言語と比較することで理解が深まっていくのではないかと思います。