Exception: KeyError

Inherits:
IndexError show all
Defined in:
error.c,
error.c

Overview

Raised when the specified key is not found. It is a subclass of IndexError.

h = {"foo" => :bar}
h.fetch("foo") #=> :bar
h.fetch("baz") #=> KeyError: key not found: "baz"

Instance Method Summary collapse

Methods inherited from Exception

#==, #backtrace, #backtrace_locations, #cause, #exception, exception, #full_message, #inspect, #message, #set_backtrace, #to_s, to_tty?

Constructor Details

#new(message = nil, receiver: nil, key: nil) ⇒ Object

Construct a new KeyError exception with the given message, receiver and key.


2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
# File 'error.c', line 2104

static VALUE
key_err_initialize(int argc, VALUE *argv, VALUE self)
{
    VALUE options;

    rb_call_super(rb_scan_args(argc, argv, "01:", NULL, &options), argv);

    if (!NIL_P(options)) {
	ID keywords[2];
	VALUE values[numberof(keywords)];
	int i;
	keywords[0] = id_receiver;
	keywords[1] = id_key;
	rb_get_kwargs(options, keywords, 0, numberof(values), values);
	for (i = 0; i < numberof(values); ++i) {
	    if (values[i] != Qundef) {
		rb_ivar_set(self, keywords[i], values[i]);
	    }
	}
    }

    return self;
}

Instance Method Details

#keyObject

Return the key caused this KeyError exception.

Returns:


2075
2076
2077
2078
2079
2080
2081
2082
2083
# File 'error.c', line 2075

static VALUE
key_err_key(VALUE self)
{
    VALUE key;

    key = rb_ivar_lookup(self, id_key, Qundef);
    if (key != Qundef) return key;
    rb_raise(rb_eArgError, "no key is available");
}

#receiverObject

Return the receiver associated with this KeyError exception.

Returns:


2058
2059
2060
2061
2062
2063
2064
2065
2066
# File 'error.c', line 2058

static VALUE
key_err_receiver(VALUE self)
{
    VALUE recv;

    recv = rb_ivar_lookup(self, id_receiver, Qundef);
    if (recv != Qundef) return recv;
    rb_raise(rb_eArgError, "no receiver is available");
}