javaで言うところのtry-catchに似たbegin-rescueブロックを使用した例外処理ができる。
例外処理の基本
下記コードだと、beginブロック内で発生した例外(StandardError)をrescueブロックで補足して処理をしている。rubyでは、rescueブロックで例外を指定しないとStandardError(JavaでのRuntimeException)が暗黙的に補足される。
def hoge raise RuntimeError, "message" end begin # javaでのtry hoge rescue # javaでのcatch # 補足した例外は、グローバル変数の「$!」で参照できる。 puts "error, #{$!.message}" end begin hoge # 例外を捕捉時に例外を変数に格納することも可能 # 下記のように「=> 変数名」とすると、変数に代入することができる。 rescue => exception puts "error, #{exception.message}" end
特定の例外を捕捉
rescueブロックで例外クラスを指定すると特定の例外のみを補足することができる。複数のrescueブロックを定義した場合、javaと同じように最初にマッチしたrescueブロックが実行される。
def hoge(n) raise TypeError, "Type error." unless n.is_a? Integer n / 0 end begin hoge(0) # ZeroDivisionErrorを捕捉 rescue ZeroDivisionError => e puts "error, #{e.message}" end begin hoge('a') # TypeErrorを捕捉 rescue TypeError => e puts "error, #{e.message}" end begin hoge('a') # ZeroDivisionErrorとTypeErrorを捕捉 rescue ZeroDivisionError, TypeError => e puts "error, #{e.message}" end