RubyでKeyErrorが出たときの対処方法
プログラミングをしていると、様々なエラーに遭遇します。
その中でも、Rubyでよく見かけるエラーの一つにKeyErrorがあります。
今回は、そのKeyErrorが発生する具体的なケースと、その対処方法をいくつか紹介していきます。
他のRubyのエラーはコチラ
-
【Ruby rails】よく起こるエラー一覧 10個のRubyのエラー事例と対処方法を確認して、適切に対処しよう!
Rubyでよく起きるエラーとその対処法 Rubyを使っていると、様々なエラーが発生することがあります。 それらのエラーに対処するためには、まずどのようなエラーがあるのかを理解することが第一歩となります ...
続きを見る
1. 存在しないキーを参照した場合
一番多い原因は、存在しないキーを参照した場合です。
Rubyのハッシュでは、存在しないキーを指定するとKeyErrorが発生します。
1 2 |
hash = { "apple" => "fruit", "carrot" => "vegetable" } puts hash["orange"] |
出力結果
KeyError (key not found: "orange")
このエラーを解消するには、存在するキーを指定するか、Hash#fetch
メソッドを使い、キーが存在しない場合のデフォルト値を指定すると良いでしょう。
1 2 |
hash = { "apple" => "fruit", "carrot" => "vegetable" } puts hash.fetch("orange", "unknown") |
出力結果
"unknown"
KindleUnlimited会員であれば、全ての本をご覧頂けます。 配列、イテレータ、ブロックを理解すれば、Rubyプログラミングの世界が変わる 第1版
2. シンボルと文字列を混同した場合
ハッシュのキーにシンボルを使用することがよくありますが、文字列と混同するとKeyErrorが発生します。
Rubyでは、文字列とシンボルは異なるオブジェクトなので、キーを指定するときには同じタイプを使用する必要があります。
1 2 |
hash = { :apple => "fruit", :carrot => "vegetable" } puts hash["apple"] |
出力結果
KeyError (key not found: "apple")
このエラーを解消するには、キーを指定するときに同じタイプを使用します。
1 2 |
hash = { :apple => "fruit", :carrot => "vegetable" } puts hash[:apple] |
出力結果
"fruit"
3. ネストしたハッシュで存在しないキーを参照した場合
ネストしたハッシュ(ハッシュの中にハッシュがあるもの)で、存在しないキーを参照するとKeyErrorが発生します。
1 2 |
hash = { "fruits" => { "apple" => "red" }, "vegetables" => { "carrot" => "orange" } } puts hash["fruits"]["banana"] |
出力結果
KeyError (key not found: "banana")
このエラーを解消するには、存在するキーを指定するか、Hash#dig
メソッドを使い、存在しないキーに対してnilを返すようにします。
1 2 |
hash = { "fruits" => { "apple" => "red" }, "vegetables" => { "carrot" => "orange" } } puts hash.dig("fruits", "banana") || "unknown" |
出力結果
"unknown"
4. キーがnilの場合
キーがnilの場合でも、KeyErrorが発生します。
1 2 3 |
hash = { "apple" => "fruit", "carrot" => "vegetable" } key = nil puts hash[key] |
出力結果
KeyError (key not found: nil)
このエラーを解消するには、キーがnilでないことを確認するか、Hash#fetchメソッドを使い、キーが存在しない場合のデフォルト値を指定します。
1 2 3 |
hash = { "apple" => "fruit", "carrot" => "vegetable" } key = nil puts hash.fetch(key, "unknown") |
出力結果
"unknown"
5. ハッシュがnilの場合
ハッシュ自体がnilの場合も、KeyErrorではなくNoMethodErrorが発生しますが、ハッシュに対する操作としては注意が必要です。
1 2 |
hash = nil puts hash["apple"] |
出力結果
NoMethodError (undefined method '[]' for nil:NilClass)
このエラーを解消するには、ハッシュがnilでないことを確認するか、安全参照演算子(&.)を使用します。
1 2 |
hash = nil puts hash&.["apple"] || "unknown" |
出力結果
"unknown"
まとめ
RubyにおけるKeyErrorは、ハッシュのキーに関連するエラーで、主に存在しないキーを参照したときに発生します。
その他にも、シンボルと文字列の混同、ネストしたハッシュの扱い、キーまたはハッシュ自体のnilなど、さまざまなケースで発生する可能性があります。
しかし、それぞれのケースに適した対処方法を用いることで、エラーを解消することが可能です。
プログラミングではエラーとの付き合い方も大切なスキルなので、様々なエラーに対する理解を深めていきましょう。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!
他のRubyのエラーはコチラ
-
【Ruby rails】よく起こるエラー一覧 10個のRubyのエラー事例と対処方法を確認して、適切に対処しよう!
Rubyでよく起きるエラーとその対処法 Rubyを使っていると、様々なエラーが発生することがあります。 それらのエラーに対処するためには、まずどのようなエラーがあるのかを理解することが第一歩となります ...
続きを見る