Ruby 2.6.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > KeyErrorクラス

class KeyError

クラスの継承リスト: KeyError < IndexError < StandardError < Exception < Object < Kernel < BasicObject

要約

Hash#fetch などで key に対応する value がない場合に発生します。

Ruby 1.8 以前では同様の場面で IndexError が発生していました。 互換性のため、KeyErrorIndexError のサブクラスになっています。

目次

特異メソッド
new
インスタンスメソッド
key receiver

特異メソッド

new(error_message = "") -> KeyError[permalink][rdoc]
new(error_message = "", receiver:) -> KeyError
new(error_message = "", key:) -> KeyError
new(error_message = "", receiver:, key:) -> KeyError

例外オブジェクトを生成して返します。

[PARAM] error_message:
エラーメッセージを表す文字列です
[PARAM] receiver:
原因となったメソッド呼び出しのレシーバ
[PARAM] key:
原因となったメソッド呼び出しのキー


h = {foo: 1}
err = KeyError.new("Message", receiver: h, key: :bar)
p err.message  # => "Message"
p err.receiver # => {:foo=>1}
p err.key      # => :bar

インスタンスメソッド

key -> object[permalink][rdoc]

KeyError の原因となったメソッド呼び出しのキーを返します。

[EXCEPTION] ArgumentError:
キーが設定されていない時に発生します。

例:

h = Hash.new
begin
  h.fetch('gumby'*20)
rescue KeyError => e
  p e.message            # => "key not found: \"gumbygumbygumbygumbygumbygumbygumbygumbygumbygumbygumbygumbyg..."
  p 'gumby'*20 == e.key  # => true
end
receiver -> object[permalink][rdoc]

KeyError の原因となったメソッド呼び出しのレシーバを返します。

[EXCEPTION] ArgumentError:
レシーバが設定されていない時に発生します。

例:

h = Hash.new
begin
  h.fetch('gumby'*20)
rescue KeyError => e
  p e.message             # => "key not found: \"gumbygumbygumbygumbygumbygumbygumbygumbygumbygumbygumbygumbyg..."
  p h.equal?(e.receiver)  # => true
end