Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

「PythonのKeyErrorとはなんですか?」エラーの出やすい処理と合わせて解説します

f:id:kenken0326:20200602152622p:plain

こんにちはPyQサポートです。 今回はKeyErrorというエラーの意味と考えられる原因を紹介します。

質問

KeyError: 'birthday'というエラーが出ました。このエラーの意味を教えてください。

入力した内容(コード)

d = {"name": "Suzuki"}

d["birthday"]

出たエラー(実行結果)

Traceback (most recent call last):
  File "energy_dozen.py", line 3, in <module>
    d["birthday"]
KeyError: 'birthday'

回答

birthdayという存在しない辞書のキーを参照しているエラーです。

解説

質問のコードはbirthdayという存在しない辞書のキーを参照しているので、birthday{キー: 値, キー: 値, ...}のキーの中に存在するかを確認してください。

辞書について

辞書リテラルは、{キー: 値, キー: 値, ...}のようにキーと値をコロン(:)で結合し、カンマ(,)で複数の要素を区切ります。要素を持たない空の辞書は{}で表します。

辞書に関するルールは以下の通りです。

  • キーと値で1つの要素
  • 要素を追加、削除できる
  • キーを利用して、値を変更できる

詳しくは以下のPyQドキュメントをご覧ください。

docs.pyq.jp

KeyErrorの出やすい処理

辞書の値の参照

  • 今回紹介したサンプルコードです
  • 参照しているキーが、辞書の中に存在しているかをチェックしましょう

辞書の要素の削除

pop()メソッド

下記のエラーが出た時は、辞書の、存在しないキーを指定して要素を削除しようとしていないかをチェックしましょう。

【サンプルコード】

d = {"name": "Hiroki"}

d.pop("birthday")

【出たエラー】

Traceback (most recent call last):
  File "keyerror/03.py", line 3, in <module>
    d.pop("birthday")
KeyError: 'birthday'

del文

下記のエラーが出た時も、辞書の、存在しないキーを指定して要素を削除しようとしていないかをチェックしましょう。

【サンプルコード】

d = {"name": "Hiroki"}


del d["birthday"]

【 出たエラー】

Traceback (most recent call last):
  File "keyerror/05.py", line 4, in <module>
    del d["birthday"]
KeyError: 'birthday'
Copyright ©2017- BeProud Inc. All rights reserved.