【解決】Python KeyError: key not found in dictionary 直し方 の原因と直し方|サンプルコード付き

1. エラーの意味と発生原因

結論から述べます。このエラー「KeyError: key not found in dictionary」は、主に存在しないキーを使って辞書からデータを取得しようとしたことが理由で発生します。
初心者によくあるミスであり、修正は簡単なので安心してください。

よくある発生パターン

  • 辞書に存在しないキーにアクセスしようとした
  • キーのスペルミスや大文字/小文字の間違い
  • 変数名を間違えて別の辞書を参照している
  • APIやJSONデータで想定していたキーが実際には存在しない

2. 具体的な解決コード

以下の修正前のコードと、修正後のコードを見比べてください。

NG例:エラーが出るコード


# 辞書を定義
user_data = {
    "name": "山田太郎",
    "age": 30,
    "email": "yamada@example.com"
}

# 存在しないキー「phone」にアクセスしようとしている
phone = user_data["phone"]  # KeyError: 'phone'
print(f"電話番号: {phone}")

OK例:正しい修正コード(方法1: get()メソッドを使う)


# 辞書を定義
user_data = {
    "name": "山田太郎",
    "age": 30,
    "email": "yamada@example.com"
}

# get()メソッドを使うと、キーがなくてもエラーにならない
# 第2引数はキーが存在しない場合のデフォルト値
phone = user_data.get("phone", "登録なし")
print(f"電話番号: {phone}")  # 電話番号: 登録なし

OK例:正しい修正コード(方法2: キーの存在確認)


# 辞書を定義
user_data = {
    "name": "山田太郎",
    "age": 30,
    "email": "yamada@example.com"
}

# キーの存在を確認してからアクセス
if "phone" in user_data:
    phone = user_data["phone"]
    print(f"電話番号: {phone}")
else:
    print("電話番号は登録されていません")

解説:
方法1では、dict.get(key, default)メソッドを使っています。このメソッドは、キーが存在しない場合にエラーを発生させる代わりに、指定したデフォルト値を返します。デフォルト値を指定しない場合はNoneを返します。

方法2では、if "key" in dictionary:という構文でキーの存在を事前にチェックしています。これにより、キーが存在する場合だけ安全にアクセスできます。

OK例:正しい修正コード(方法3: try-exceptでエラー処理)


# 辞書を定義
user_data = {
    "name": "山田太郎",
    "age": 30,
    "email": "yamada@example.com"
}

# try-exceptでエラーをキャッチ
try:
    phone = user_data["phone"]
    print(f"電話番号: {phone}")
except KeyError:
    print("電話番号は登録されていません")

方法3のtry-except文は、エラーが発生する可能性のあるコードを実行し、エラーが発生した場合に適切に処理します。これは特に複数の処理を行う場合や、エラー処理が複雑な場合に便利です。

3. 再発防止のポイント

今後このエラーを出さないためには、以下の点に注意しましょう。

  • 辞書操作の基本ルールを理解する:存在しないキーへのアクセスは必ずKeyErrorになります
  • get()メソッドを積極的に使う:不確かなキーにアクセスする場合は常にget()を使いましょう
  • データ構造を事前に確認する:特に外部APIからのデータを扱う場合は、最初にprint()で中身を確認すると安全です
  • 変数名やキー名のタイプミスに注意する:特に大文字小文字は区別されるので注意が必要です
  • 複雑な辞書操作の前にキーの存在を確認する:特にネストされた辞書では各階層でキーの存在確認が重要です

ネストされた辞書の安全な操作例


# ネストされた辞書
user = {
    "name": "山田太郎",
    "contact": {
        "email": "yamada@example.com"
        # phoneキーはない
    }
}

# 安全なアクセス方法
if "contact" in user and "phone" in user["contact"]:
    phone = user["contact"]["phone"]
    print(f"電話番号: {phone}")
else:
    print("電話番号は登録されていません")

# または、getメソッドを使った方法
contact = user.get("contact", {})
phone = contact.get("phone", "登録なし")
print(f"電話番号: {phone}")  # 電話番号: 登録なし

まとめ

今回のエラー「KeyError: key not found in dictionary」は、存在しないキーにアクセスしないように工夫することで解決できます。
主な解決方法は3つあります:

  • get()メソッドを使ってデフォルト値を設定する
  • if key in dictionaryでキーの存在を事前に確認する
  • try-exceptでエラーをキャッチして適切に処理する

プログラミング学習においてエラーはつきものです。このKeyErrorは特によく見かけるエラーなので、今回の対処法をマスターしておけば、今後スムーズに開発を進められるでしょう。一つずつ解決していきましょう。

コメント

タイトルとURLをコピーしました