はじめに
Pythonでコードを書いているとエラーが発生しました。
しかもエラーはいくつかの原因で発生。
今回のエラーメッセージは表示がシンプルで、かつ発生する条件も1つでありませんでした。
また同じエラーが出そうなのでメモとして原因と対処方法を残します。
エラーメッセージ&サンプルコードとその原因と対処方法
エラーメッセージ
まずエラーメッセージですが
KeyError: '****'
というものでした。
「***」は条件によって変わると思います。
エラーは
キー「***」のエラー
という非常にシンプルなものです。
サンプルプログラム&原因と対処方法
このエラーが発生する原因としていくつかあります。
そのうちの幾つかを見てみようと思います。
エラーが発生する条件は
- Pythonの辞書(dictionary)で存在しないキーを使ってアクセスしようとする
- CSVファイルで存在しない列名を参照しようとする
などがあります。
それぞれのサンプルソースです。
辞書
次の例はPythonで辞書を作成して、存在しないキーにアクセスしてエラーになる例です。
dictionary = {"name": "Alice", "age": 25}
print(dictionary["height"])
これを実行するとKeyError: 'height'
と表示されます。
辞書のキーに「height」が存在しないにも関わらずそのキーでアクセスしようとしている(2行目)からです。
次のソースコードはエラーを修正した例です。
dictionary = {"name": "Alice", "age": 25}
if "height" in dictionary:
print(dictionary["height"])
else:
print("Key 'height' does not exist in the dictionary.")
条件分岐でキーが存在するか確認してからキーにアクセスする(2行目)ことでエラーを回避しています。
CSV
次はCSVファイルの例です。
読み込むファイル名は「sample.csv」です。
Name,Age,Occupation
Alice,25,Engineer
Bob,30,Doctor
そして次のソースコードはエラーが発生する例です。
import csv
with open('sample.csv', 'r') as f:
reader = csv.DictReader(f)
for row in reader:
print(row['Salary'])
これを実行するとエラーが表示されます。
辞書と同じで存在しない要素にアクセスしよう(6行目)としてエラーになっています。
次がエラーを修正したソースコードになります。
import csv
with open('sample.csv', 'r') as f:
reader = csv.DictReader(f)
if 'Salary' in reader.fieldnames:
for row in reader:
print(row['Salary'])
else:
print("Column 'Salary' does not exist in the CSV file.")
こちらも辞書と同様に要素が存在するかどうかを確認してから値を取る(5行目)ようにしています。
さいごに
今回はPythonで存在しない要素をアクセスして発生するエラーについてでした。
辞書やCSVなどはよく使う事が多いと思います。
またエラーのメッセージがシンプルすぎて原因が分かりにくいかと思いますが、原因が分かると対処もしやすくなるのではないかと思います。
この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。