Rubyの例外処理を学ぶ
例外は想定外の問題が起きたときに発生し、Rubyはエラーメッセージを表示してプログラムを停止する。
無理に処理を続けるよりは、その場でプログラムを止めた方が安全という考え方。
逆に、問題に対処できるのであれば、例外が発生してもプログラムを止めないほうがユーザに親切
例外を処理するためにはbegin~rescueを 使う
code:begin.rb
begin
式..
式..]..
[else
式..]
[ensure
式..]
end
例外の発生有無に関わらず実行したい処理はensure節に書く。
rescue節で個別の例外を 1つずつ指定するのではなく、親クラスの例外を指定することで、関連する例外をまとめて処理できる
例外クラス名を省略してrescue => eと書くと、Exceptionクラスから派生するすべての例外クラスをrescueできる。
即座にプログラムを停止させる方が安全な場合もある(一般的にはプログラムを続行させることが困難な状況で発生する例外)
メモリが足りないときに発生するNoMemoryError
プログラムの構文が間違っているときに発生するSyntaxError
すべての例外をrescueするのではなく対象にしたいサブクラスを書く
raise メソッドで例外を発生できる(raise 例外クラス名, "エラーメッセージ")
メソッドにブロックを渡すことで、ensure節を書かなくても自動的に終了処理を行ってくれることがある
例外処理の返り値は、例外が発生しなかった場合はbegin節もしくはelse節、例外が発生し補足された場合はrescue節の最後の式となる
式1 rescue 式2:式1で例外が発生した場合は、式2を評価する
メソッド内で、最初から最後までを例外処理とする場合は、beginとendを省略しても良い
rescue節で、別の例外が発生すると、原因調査が困難になる場合があるため注意すること
例外を捕捉した後でプログラムを異常終了させたい場合は、rescue節でraiseを書くことで、捕捉した例外を再度発生させる
class MyError < StandardError # ...
関連URL
Rubyの例外処理のキーワードがrescueやensureなのは、Eiffelという言語から来ている