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, #detailed_message, #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.



2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
# File 'error.c', line 2843

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 (!UNDEF_P(values[i])) {
                rb_ivar_set(self, keywords[i], values[i]);
            }
        }
    }

    return self;
}

Instance Method Details

#keyObject

Return the key caused this KeyError exception.

Returns:



2814
2815
2816
2817
2818
2819
2820
2821
2822
# File 'error.c', line 2814

static VALUE
key_err_key(VALUE self)
{
    VALUE key;

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

#receiverObject

Return the receiver associated with this KeyError exception.

Returns:



2797
2798
2799
2800
2801
2802
2803
2804
2805
# File 'error.c', line 2797

static VALUE
key_err_receiver(VALUE self)
{
    VALUE recv;

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