キーワードエラーの修正方法を簡単に解説
Python KeyError例外とそのハンドリング方法
PythonのKeyError
例外は、初心者によく遭遇する例外です。KeyError
が発生する原因と、プログラムが停止するのを防ぐためのいくつかの解決策を知ることは、Pythonプログラマーとしてのスキル向上に必要なステップです。
このチュートリアルの終わりまでに、次のことを知るようになります:
- Pythonの
KeyError
が通常何を意味するか - 標準ライブラリで
KeyError
が他でどこで発生するか KeyError
を見たときのハンドリング方法
Free Bonus: ここをクリックして無料のPythonチートシートを入手して、Python 3の基本操作、データ型、辞書、リスト、そしてPython関数の使い方を学びましょう。
PythonのKeyError
の通常の意味
Pythonの公式ドキュメントによると、KeyError
は、マッピングキーにアクセスしてマッピング内に見つからなかった場合に発生します。マッピングは、一連の値を別の値にマッピングするデータ構造です。Pythonで最も一般的なマッピングは辞書です。
PythonのKeyError
は、LookupError
例外の一種であり、探しているキーを取得する際に問題があったことを示します。KeyError
を見たときの意味は、探しているキーが見つからなかったことです。
以下の例では、3人の年齢が定義された辞書 (ages
) を見ることができます。辞書内に存在しないキーにアクセスしようとすると、KeyError
が発生します:
ここでは、ages
辞書でキー'Michael'
にアクセスしようとすると、KeyError
が発生します。トレースバックの一番下には、次の情報が表示されます:
KeyError
が発生したこと- 見つからなかったキーである
'Michael'
最後から2番目の行には、例外が発生した行が表示されます。ファイルからPythonコードを実行する際には、この情報がより役立ちます。
注意: Pythonで例外が発生するときには、トレースバックが表示されます。トレースバックには、例外がなぜ発生し、それが引き起こされた要因を判断するために必要なすべての関連情報が含まれています。
次のプログラムでは、ages
辞書が再び定義されています。この時、人物の名前を指定するように促されます:
このコードでは、プロンプトで入力する名前を受け取り、その人物の年齢を取得しようとします。プロンプトに入力した内容は次の行のages[person]
で使用されます。
このプログラムを実行すると、次のような結果が表示されます:
プロンプトにMichael
と入力すると、KeyError
が発生します。トレースバックには、ファイルの行数とエラーメッセージが表示されます。
このプログラムでは、プロンプトで入力された名前に対応する年齢を取得しようとしますが、ages
辞書に該当するキーが存在しないため、KeyError
が発生します。
これがPythonのKeyError
が通常何を意味するのかの概要です。次に、標準ライブラリでKeyError
をどこで見ることができるかを見てみましょう。
標準ライブラリでのPython KeyErrorの発生場所
Pythonの標準ライブラリでは、さまざまな場所でKeyError
が発生する可能性があります。以下では、いくつかの具体的な例を紹介します:
辞書 (dict
)
先程も説明したように、辞書 (dict
) はPythonで最も一般的なマッピングです。辞書では、存在しないキーにアクセスしようとするとKeyError
が発生します。
リスト (list
)
リスト (list
) はインデックスで要素にアクセスしますが、存在しないインデックスにアクセスするとIndexError
ではなくKeyError
が発生します。
セット (set
)
セット (set
) も辞書と同様に、存在しない要素にアクセスするとKeyError
が発生します。
タプル (tuple
)
タプル (tuple
) は不変性があり、辞書と同じく存在しないインデックスにアクセスするとKeyError
が発生します。
これらは、Pythonの標準ライブラリの一部でKeyError
が発生する例です。では、自分自身のコードでKeyError
を発生させる必要がある場合はどうなるのでしょうか?
自分自身のコードでPython KeyErrorの発生
自分のコードでKeyError
を発生させる必要がある場合は、次のようなシナリオがあるかもしれません:
- キーが存在するかどうかを確認する必要がある場合
- 辞書以外のデータ構造でキーを使用するためのチェックが必要な場合
KeyError
を発生させる必要がある場合にどのように対処すれば良いかを考えてみましょう。
Python KeyErrorをハンドリングする方法
PythonのKeyError
をハンドリングするためには、いくつかの方法があります。以下では、いくつかの一般的なケースとその対処法を紹介します。
一般的な解決策: .get()
辞書 (dict
) のキーが存在するかどうかをチェックするために、.get()
メソッドを使用する方法があります。.get()
メソッドを使用すると、指定したキーが存在しない場合に発生するKeyError
を回避することができます。
以下の例では、辞書 ages
内のキー 'Michael'
の存在をチェックし、キーが存在する場合はその値を取得して表示します。キーが存在しない場合は、デフォルト値 None
を返します。
このコードを実行すると、キーが存在しない場合にKeyError
が発生せず、代わりにメッセージ 'Michael is not in the ages dictionary.'
が表示されます。
.get()
メソッドは、キーが存在するかどうかを検証するための一般的な解決策です。次に、より少なくとも一度はキーが存在することがわかっている場合の解決策を見てみましょう。
珍しい解決策: キーのチェック
キーが辞書 (dict
) 内に存在することを事前に知っている場合は、in
演算子を使用してキーの存在を確認できます。
以下の例では、辞書 ages
内のキー 'Michael'
の存在を事前にチェックし、キーが存在する場合のみその値を取得して表示します。
このコードを実行すると、キーが存在しない場合にKeyError
が発生せず、代わりにメッセージ 'Michael is not in the ages dictionary.'
が表示されます。
この方法は、キーがあることが分かっている場合に適していますが、キーが存在するかどうかをチェックするために毎回if
文を使用する必要があります。そのため、通常は.get()
メソッドを使用する方が効率的です。
次に、一般的な解決策と珍しい解決策を組み合わせて、さらに汎用的な解決策を見てみましょう。
一般的な解決策: try except
PythonのKeyError
をハンドリングするもっとも一般的な方法は、try except
文を使用することです。
以下の例では、辞書 ages
内のキー 'Michael'
の存在をチェックし、キーが存在する場合はその値を取得して表示します。キーが存在しない場合は、KeyError
が発生する可能性があるため、try except
文を使用して例外をハンドリングします。
このコードを実行すると、キーが存在しない場合にKeyError
が発生せず、代わりにメッセージ 'Michael is not in the ages dictionary.'
が表示されます。
try except
文を使用することで、プログラムが正常に動作するかどうかに関わらず、例外が発生してもエラーを表示せずに継続することができます。
結論
PythonのKeyError
例外は、辞書や他のマッピングで存在しないキーにアクセスしようとした場合に発生します。このチュートリアルでは、KeyError
が通常何を意味し、どのようにハンドリングするかについて説明しました。
PythonのKeyError
を理解し、適切にハンドリングすることで、より効果的なプログラムを作成することができるでしょう。