コンテンツにスキップ

例外処理

raise

  • 例外を発生させる。

文法:

raise
raise messageまたはexception
raise error_type, message
raise error_type, message, traceback

例:

raise                                   # RuntimeError を発生させる
raise "you lose"                        # RuntimeError を発生させる
raise SyntaxError, "invalid syntax"     # SyntaxError を発生させる
raise SyntaxError.new("invalid syntax") # SyntaxError を発生させる

begin

  • 発生した例外を捕捉する。

文法:

begin
  式..
[rescue [error_type,..] [=> evar] [then]
  式..]..
[else
  式..]
[ensure
  式..]
end

例:

begin
  do_something
rescue
  recover
ensure
  must_to_do
end

rescue

  • 本体の実行中に例外が発生した場合、rescue で例外を捕捉できる。
  • 発生した例外と一致する rescue 節が存在する時には rescue 節の本体が実行される。
  • 複数の rescue がある場合、最初に該当した rescue 節が実行される。
  • 一般的なエラーよりも特定的なエラーから順に rescue するのが良い。(例えば、rescue StandardError は最後に記述する)
class SomeError < StandardError; end
class SomeOtherError < SomeError; end

def meth1
  raise SomeOtherError.new("error")
end

begin
  meth1
rescue SomeError
  print "SomeError"
rescue SomeOtherError
  print "SomeOtherError"
end

# => "SomeError"

else

  • 本体の実行によって例外が発生しなかった場合に評価される。

ensure

  • begin 式を終了する直前に必ず ensure 節の本体を評価します。