ホーム › エラー解決 › Ruby › KeyError
Ruby ERROR

Ruby KeyError の原因と解決法

Hash#fetchで存在しないキーを指定すると発生するエラーです。キーのタイポと、シンボル・文字列の混同が2大原因です。

このエラーメッセージ

KeyError: key not found: :adress

原因

❌ エラーになるコード

NG
user = { name: "太郎", address: "東京" }
puts user.fetch(:adress)  # キーのタイポ

✅ 修正したコード

OK
user = { name: "太郎", address: "東京" }
puts user.fetch(:address)

# キーがない可能性があるならデフォルト値を指定
puts user.fetch(:phone, "未登録")
▶ 修正済みコードを実行エディタで開く
progoのRuby実行環境(インストール不要・登録不要)でその場で動作を確認できます。

解決のポイント

まずキーのつづりと、シンボルか文字列か(:nameと"name"は別のキー)を確認します。存在しない可能性のあるキーにはfetch(:key, デフォルト値)で第2引数を渡すと、エラーではなく代替値が返ります。user.keysで実際のキー一覧を出力してみるのも早道です。

よくある質問

user[:adress] だとエラーにならないのはなぜ?
[]は存在しないキーに対してnilを返す仕様だからです。fetchは「キーが必ずあるはず」という意図を明示し、ない場合に即エラーで知らせてくれます。
どちらを使うべき?
キーが必ず存在する前提ならfetch、なくても正常ならfetchのデフォルト値か[]を使う、が使い分けの目安です。