raise -> ()
[permalink][rdoc][edit]fail -> ()
raise(message, cause: $!) -> ()
fail(message, cause: $!) -> ()
raise(error_type, message = nil, backtrace = caller(0), cause: $!) -> ()
fail(error_type, message = nil, backtrace = caller(0), cause: $!) -> ()
-
例外を発生させます。発生した例外は変数 $! に格納されます。また例外が発生した時のスタックトレースは変数 $@ に格納されます。発生した例外は rescue 節で捕捉できます。
引数無しの場合は、同スレッドの同じブロック内で最後に rescue された例外オブジェクト ($!) を再発生させます。そのような例外が存在しないが自身は捕捉されている時には例外 RuntimeError を発生させます。
begin open("nonexist") rescue raise #=> `open': No such file or directory - "nonexist" (Errno::ENOENT) end
引数を渡した場合は、例外メッセージ message を持った error_type の示す例外(省略時 RuntimeError)を発生させます。
error_type として例外ではないクラスやオブジェクトを指定した場合、そのオブジェクトの exception メソッドが返す値を発生する例外にします。その際、exception メソッドに引数として変数 message を渡すことができます。
- [PARAM] error_type:
- 発生させる例外を例外クラスまたは例外クラスのインスタンスで指定します。
- [PARAM] message:
- 例外のメッセージとなる文字列です。
- [PARAM] backtrace:
- 例外発生時のスタックトレースで、Kernel.#caller の戻り値と同じ形式で指定しなければいけません。
- [PARAM] cause:
- 現在の例外($!)の代わりに Exception#cause に設定する例外を指定します。 Exception オブジェクトまたは nil を指定できます。
- [EXCEPTION] TypeError:
- exception メソッドが例外オブジェクトを返さなかった場合に発生します。
例外の捕捉の例を示します。
begin raise NameError,"!!error!!" rescue ArgumentError => err rescue NameError => err rescue TypeError => err ensure p err #=> #<NameError: !!error!!> end
def foo num print 'in method.' raise "error!!" if num <= 9 rescue RuntimeError num += 10 print 'in rescue.' retry else print 'in else.' ensure print "in ensure.\n" end foo(4) #=> in method.in rescue.in method.in else.in ensure.
class MyException def exception(mesg=nil) SecurityError.new(mesg) end end begin raise MyException.new rescue SecurityError p $! #=> #<SecurityError: SecurityError> end
[SEE_ALSO] Kernel.#caller