Exception: Exception
Overview
Descendants of class Exception
are used to communicate between raise
methods and rescue
statements in begin/end
blocks. Exception
objects carry information about the exception---its type (the exception's class name), an optional descriptive string, and optional traceback information. Programs may subclass Exception
, or more typically StandardError
to provide custom classes and add additional information.
Direct Known Subclasses
NoMemoryError, ScriptError, SecurityError, SignalException, StandardError, SystemExit, SystemStackError, fatal
Class Method Summary collapse
-
.exception(string) ⇒ Exception
With no argument, or if the argument is the same as the receiver, return the receiver.
Instance Method Summary collapse
-
#==(obj) ⇒ Boolean
Equality---If obj is not an
Exception
, returnsfalse
. -
#backtrace ⇒ Array
Returns any backtrace associated with the exception.
-
#exception(string) ⇒ Exception
With no argument, or if the argument is the same as the receiver, return the receiver.
-
#new(msg = nil) ⇒ Exception
constructor
Construct a new Exception object, optionally passing in a message.
-
#inspect ⇒ String
Return this exception's class name an message.
-
#message ⇒ String
Returns the result of invoking
exception.to_s
. -
#set_backtrace(array) ⇒ Array
Sets the backtrace information associated with exc.
-
#to_s ⇒ String
Returns exception's message (or the name of the exception if no message is set).
Constructor Details
#new(msg = nil) ⇒ Exception
Construct a new Exception object, optionally passing in
a message.
|
# File 'error.c'
static VALUE
exc_initialize(int argc, VALUE *argv, VALUE exc)
{
VALUE arg;
rb_scan_args(argc, argv, "01", &arg);
rb_iv_set(exc, "mesg", arg);
rb_iv_set(exc, "bt", Qnil);
return exc;
}
|
Class Method Details
.exception(string) ⇒ Exception
With no argument, or if the argument is the same as the receiver, return the receiver. Otherwise, create a new exception object of the same class as the receiver, but with a message equal to string.to_str
.
Instance Method Details
#==(obj) ⇒ Boolean
Equality---If obj is not an Exception
, returns false
. Otherwise, returns true
if exc and obj share same class, messages, and backtrace.
|
# File 'error.c'
static VALUE
exc_equal(VALUE exc, VALUE obj)
{
VALUE mesg, backtrace;
ID id_mesg;
if (exc == obj) return Qtrue;
CONST_ID(id_mesg, "mesg");
if (rb_obj_class(exc) != rb_obj_class(obj)) {
ID id_message, id_backtrace;
CONST_ID(id_message, "message");
CONST_ID(id_backtrace, "backtrace");
mesg = rb_check_funcall(obj, id_message, 0, 0);
if (mesg == Qundef) return Qfalse;
backtrace = rb_check_funcall(obj, id_backtrace, 0, 0);
if (backtrace == Qundef) return Qfalse;
}
|
#backtrace ⇒ Array
Returns any backtrace associated with the exception. The backtrace is an array of strings, each containing either "filename:lineNo: in 'method"' or "filename:lineNo."
def a
raise "boom"
end
def b
a()
end
begin
b()
rescue => detail
print detail.backtrace.join("\n")
end
produces:
prog.rb:2:in `a'
prog.rb:6:in `b'
prog.rb:10
|
# File 'error.c'
static VALUE
exc_backtrace(VALUE exc)
{
ID bt;
CONST_ID(bt, "bt");
return rb_attr_get(exc, bt);
}
|
#exception(string) ⇒ Exception
With no argument, or if the argument is the same as the receiver, return the receiver. Otherwise, create a new exception object of the same class as the receiver, but with a message equal to string.to_str
.
|
# File 'error.c'
/*
* Document-method: exception
*
* call-seq:
* exc.exception(string) -> an_exception or exc
*
* With no argument, or if the argument is the same as the receiver,
* return the receiver. Otherwise, create a new
* exception object of the same class as the receiver, but with a
* message equal to <code>string.to_str</code>.
*
*/
static VALUE
exc_exception(int argc, VALUE *argv, VALUE self)
{
VALUE exc;
if (argc == 0) return self;
if (argc == 1 && self == argv[0]) return self;
exc = rb_obj_clone(self);
exc_initialize(argc, argv, exc);
return exc;
}
|
#inspect ⇒ String
Return this exception's class name an message
|
# File 'error.c'
static VALUE
exc_inspect(VALUE exc)
{
VALUE str, klass;
klass = CLASS_OF(exc);
exc = rb_obj_as_string(exc);
if (RSTRING_LEN(exc) == 0) {
return rb_str_dup(rb_class_name(klass));
}
|
#message ⇒ String
Returns the result of invoking exception.to_s
. Normally this returns the exception's message or name. By supplying a to_str method, exceptions are agreeing to be used where Strings are expected.
|
# File 'error.c'
static VALUE
exc_message(VALUE exc)
{
return rb_funcall(exc, rb_intern("to_s"), 0, 0);
}
|
#set_backtrace(array) ⇒ Array
Sets the backtrace information associated with exc. The argument must be an array of String
objects in the format described in Exception#backtrace
.
|
# File 'error.c'
static VALUE
exc_set_backtrace(VALUE exc, VALUE bt)
{
return rb_iv_set(exc, "bt", rb_check_backtrace(bt));
}
|
#to_s ⇒ String
Returns exception's message (or the name of the exception if no message is set).
|
# File 'error.c'
static VALUE
exc_to_s(VALUE exc)
{
VALUE mesg = rb_attr_get(exc, rb_intern("mesg"));
VALUE r = Qnil;
if (NIL_P(mesg)) return rb_class_name(CLASS_OF(exc));
r = rb_String(mesg);
OBJ_INFECT(r, exc);
return r;
}
|