Elixir: KeyError
Elixirでマップに存在しないキーにアクセスした場合のエラー
概要
Elixirでマップやキーワードリストに存在しないキーにアクセスしようとした場合に発生するエラーです。
エラーメッセージ
** (KeyError) key :name not found in: %{id: 1, email: "test@example.com"}
原因
- 存在しないキーへのアクセス: map.keyでアクセスしたがキーがない
- タイポ: キー名のスペルミス
- データ構造の変更: APIレスポンスやDBスキーマの変更
- nil のマップアクセス: nilに対してキーアクセス
解決策
1. Map.get/3 を使用
| |
2. アクセス構文 [] を使用
| |
3. Map.fetch/2 で明示的にハンドル
| |
4. パターンマッチで安全に抽出
| |
5. get_in/2 でネストしたアクセス
| |
6. struct でキーを保証
| |
7. キーの存在確認
| |
8. update系関数での対処
| |
9. キーワードリストの場合
| |
よくある間違い
- JSONデコード後のマップで文字列キーとアトムキーを混同
- 外部APIのレスポンス構造の変更を考慮していない
- nil安全でないパイプライン処理
- structと通常のマップの挙動の違いを理解していない
Elixir の他のエラー
この記事は役に立ちましたか?