Last Updated on 2025年7月28日
概要
Pythonで辞書(dictionary)を扱う際に、存在しないキーにアクセスしようとして発生するのが「KeyError: 'some_key'」です。初心者から上級者までよく直面するこのエラーについて、原因から対処法まで詳しく解説します。
目次
エラー内容
まずは実際のエラー例を見てみましょう。
|
1 2 |
data = {'name': 'Alice', 'age': 30} print(data['gender']) |
このコードを実行すると、以下のようなエラーが出ます。
|
1 |
KeyError: 'gender' |
この「KeyError」は、辞書に存在しないキー 'gender' にアクセスしようとしたために発生しています。
原因
KeyErrorは、以下のようなケースで発生します。
- 辞書に存在しないキーを直接指定してアクセスした
- APIレスポンスなどの辞書に、想定していたキーが含まれていなかった
- 文字列のタイポ(例:'username' と 'user_name')
- キーの型が異なる(例:int型のキーをstrでアクセスしようとした)
Pythonの辞書は、存在しないキーにアクセスしようとすると即座にエラーを出す仕様です。
対処法
KeyErrorへの主な対処法は以下の通りです。
1. in演算子でキーの存在確認
|
1 2 3 4 |
if 'gender' in data: print(data['gender']) else: print('genderキーは存在しません') |
2. get()メソッドの使用
|
1 2 |
gender = data.get('gender', '未設定') print(gender) |
get()を使うと、キーが存在しない場合でもデフォルト値を返してくれます。
3. try-except構文の活用
|
1 2 3 4 |
try: print(data['gender']) except KeyError: print('genderキーが見つかりませんでした') |
4. defaultdictの利用(collectionsモジュール)
|
1 2 3 4 5 |
from collections import defaultdict data = defaultdict(lambda: '未設定') data['name'] = 'Alice' print(data['gender']) # => 未設定 |
5. キーの一覧を事前に確認
|
1 |
print(data.keys()) |
辞書のキー一覧を表示して、存在しないキーをアクセスしないように事前確認するのも有効です。
補足
辞書はとても便利なデータ構造ですが、扱いを間違えるとエラーの原因になります。以下のような場面では特に注意が必要です。
- Web APIからのJSONレスポンス:レスポンス内容が変わることがある
- ループ処理中の辞書アクセス:キーの存在チェックを忘れると全体が止まる
- マージ処理:意図しないキーが上書きされる可能性がある
Pythonのバージョンによる違い
Python 3.7以降は辞書の順序が保証されるようになりましたが、KeyError自体の仕様は変わりません。
カスタムエラー処理を作成する
|
1 2 3 4 5 6 7 |
def safe_get(d, key, default='未設定'): try: return d[key] except KeyError: return default print(safe_get(data, 'gender')) |
まとめ
- KeyErrorは辞書に存在しないキーを指定した場合に発生
- 対策としては in演算子, get(), try-except などの構文がある
- 予防のためには、データ構造の設計や仕様を明確にしておくことが重要
辞書を扱う際は、常に「そのキーは本当に存在するのか?」を意識することで、KeyErrorの発生を未然に防げます。特に外部からデータを受け取るケースでは注意が必要です。


