Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonのKeyErrorとは?初心者向けに原因と対処法を徹底解説

Pythonで辞書(dict)を扱っていると、突然「KeyError」というエラーに遭遇することがあります。KeyErrorは、辞書に存在しないキーへアクセスしようとしたときに発生するエラーです。存在するキーを指定するようコードを見直すか、キーの存在を事前に確認することで解決できます。

PythonのKeyErrorとは?

KeyErrorが発生するということは、プログラムが辞書内に存在しないキーへアクセスしようとしていることを意味します。仕組みと対処法さえわかれば、恐れる必要はありません。

KeyErrorへの対処には、主に次の方法があります。

  • get()メソッドを使ってデフォルト値を返す
  • in演算子でキーの存在を事前に確認する
  • try…exceptブロックで例外を捕捉する

この記事では、KeyErrorとは何か、なぜ発生するのかを解説し、実際のコード例をもとに具体的な修正方法を紹介します。

なぜKeyErrorが発生するのか

PythonのKeyErrorは、インデックス構文(角括弧 [])を使って、辞書に存在しない要素へアクセスしようとしたときに発生します。Pythonは存在しないキーに対応する値を返せないため、このエラーが出ます。

Pythonの辞書は、波括弧 {} の中にキーと値のペアを格納するデータ構造です。

raspberry_pi = {
    'name': 'Raspberry Pi 4',
    'price': 35.00,
    'RAM': '4GB'
}

この例では、キーは 'name'、'price'、'RAM' の3つです。辞書では、コロンの左側にキーが書かれます。

それでは、この辞書からUSBポートの数を取得しようとするとどうなるでしょうか。

print(raspberry_pi['usb_ports'])

実行結果:

KeyError: 'usb_ports'

このエラーは、指定したキーが辞書に存在しないことを示しています。ここでは「usb_ports」というキーが見つからなかったためにエラーになっています。

KeyErrorへの対処法

どの方法が最適かは、コードの用途によって異なります。それぞれの方法を順番に見ていきましょう。

方法1:get()メソッドでデフォルト値を指定する

辞書のget()メソッドは、指定したキーに対応する値を返します。第2引数でデフォルト値を指定でき、キーが存在しない場合にはそのデフォルト値が返されます。エラーが発生しないため、安全に値を取り出せるのが特徴です。

raspberry_pi = {
    'name': 'Raspberry Pi 4',
    'price': 35.00,
    'RAM': '4GB'
}

get_key = input('取得したい情報を入力してください(name / price / RAM): ')

print('このコンピュータの{}は{}です。'.format(get_key, raspberry_pi.get(get_key, '利用できません')))

実行例:

取得したい情報を入力してください(name / price / RAM): ALU
このコンピュータのALUは利用できません。

このコードでは、get()メソッドで「ALU」というキーを取得しようとしています。辞書にこのキーは存在しないため、あらかじめ指定しておいたデフォルト値「利用できません」が返されます。

方法2:in演算子でキーの存在を事前に確認する

in演算子はPythonのメンバーシップ演算子の一つで、ある要素がリストや辞書などに含まれているかどうかを調べられます。これを使えば、キーへアクセスする前にその存在を確認できます。

raspberry_pi = {
    'name': 'Raspberry Pi 4',
    'price': 35.00,
    'RAM': '4GB'
}

get_key = input('取得したい情報を入力してください(name / price / RAM): ')

if get_key in raspberry_pi:
    print('このコンピュータの{}は{}です。'.format(get_key, raspberry_pi[get_key]))
else:
    print('この情報は利用できません。')

実行例(存在するキーの場合):

取得したい情報を入力してください(name / price / RAM): name
このコンピュータのnameはRaspberry Pi 4です。

実行例(存在しないキーの場合):

取得したい情報を入力してください(name / price / RAM): CPU
この情報は利用できません。

このコードでは、「get_key」に入った値が「raspberry_pi」辞書のキーとして存在するかどうかをin演算子で判定しています。キーが存在すればif文の中身が実行され、存在しなければelse文が実行されます。elseブロック内ではキーへアクセスしないため、KeyErrorが発生することはありません。

方法3:try…exceptブロックで例外を捕捉する

try…exceptブロックは、エラーが起こる可能性のあるコードを実行し、問題が起きた場合に独自の処理を行うための構文です。KeyErrorが発生してもプログラムが途中で停止しないようにできます。

raspberry_pi = {
    'name': 'Raspberry Pi 4',
    'price': 35.00,
    'RAM': '4GB'
}

get_key = input('取得したい情報を入力してください(name / price / RAM): ')

try:
    print('このコンピュータの{}は{}です。'.format(get_key, raspberry_pi[get_key]))
except KeyError:
    print('この情報は利用できません。')

実行例:

取得したい情報を入力してください(name / price / RAM): USB
この情報は利用できません。

このコードでは、tryブロック内でRaspberry Piに関する情報をコンソールに出力しようとしています。tryブロック内のどこかでKeyErrorが発生すると、代わりにexceptブロックの処理が実行されます。つまり、KeyErrorが発生するたびに「この情報は利用できません。」と表示される仕組みです。

補足として、dict.setdefault()メソッドやcollections.defaultdictを使う方法もあります。setdefault()はget()と似ていますが、キーが存在しない場合にデフォルト値を辞書へ挿入する点が異なります。新しいキーを追加しながら値を扱いたい場合に便利なので、覚えておくとよいでしょう。

まとめ

KeyErrorは、辞書に存在しないキーの値へアクセスしようとしたときに発生するエラーです。対処法としては、キーを使用する前にin演算子などで存在を確認する方法、get()メソッドでデフォルト値を指定する方法、try…exceptブロックで例外を捕捉する方法があります。それぞれの特徴を理解し、状況に応じて使い分けることが大切です。

  1. Pythonの辞書(dict)にキーが存在するかどうかを確認する方法

    Pythonの辞書(dict)に特定のキーが存在するかどうかを確認するには、in 演算子を使用します。in 演算子は、指定したキーが辞書内に存在するかどうかを判定し、結果として True または False を返します。最もシンプルで推奨される方法です。 サンプルコード my_dict = {name: TutorialsPoint, time: 15 years, location: India} print(name in my_dict) print(foo in my_dict) 実行結果 上記のコードを実行すると、次のような出力が得られます。 True False この例では、nam

  2. Pythonの辞書からキーを削除する方法を解説!del文・pop()・popitem()の使い分け

    はじめに Pythonの辞書(dict)は、キーと値のペアでデータを管理できる非常に便利なデータ構造です。プログラムの実行中に不要になった要素を削除したい場面は多くありますが、Pythonにはいくつかの削除方法が用意されています。 この記事では、代表的な削除方法であるdel文とpop()メソッドを中心に、それぞれの特徴や使い分けのポイントを実行例とともにわかりやすく解説します。 del文でキーを削除する Pythonのdelキーワードは、ほぼすべてのオブジェクトに対して使用できます。辞書から特定の要素を削除する場合は、delステートメントにキーを指定します。 >>> D1