Pythonをjupyter notebookであれやこれやと勉強していたら、突如出てきたのが「KeyError」のエラー。なんじゃこら?と思ったのですが、そんなクリティカルな問題ではなさそうだけど、原因と解消方法がわかったので、議事録がてら共有です。
KeyErrorの原因
KeyErrorで出てくる原因は、「辞書型データを参照した際に、辞書内に指定したキーが存在しないと、KeyErrorが発生する」とのことです。要は「辞書型データ内で定義したデータを引っ張る時に、ちゃんと定義したデータの記述通りに引っ張ってきていないのでは?」ということです。
回避だけをするなら、例外処理の「try-except」を構文も1つの方法ですが、自分が実施しようとした内容で「try-except」構文を使うのは何か違うので、以下に失敗記述と解消方法を記載
KeyErrorの失敗内容と解消方法
自分の記述をもとに説明していきます。
KeyErrorが出るコード一部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
plt.scatter(irispd0['petal length (cm)'], irispd0['petal width (cm)'],c='red',\ label= species[dic[0]],marker='x') plt.scatter(irispd1['petal length (cm)'], irispd1['petal width (cm)'],c='blue',\ label= species[dic[1]],marker='.') plt.scatter(irispd2['petal length (cm)'], irispd2['petal width (cm)'],c='red',\ label= species[dic[2]],marker='+') plt.scatter(irisdiff['petal length(cm)'],irisdiff['petal width(cm)'],c='black',\ label='missed',marker='^') plt.title('iris散布図、k-means法') plt.xlabel('花弁の長さcm') plt.ylabel('花弁の幅cm') plt.legend() plt.show() |
エラー内容を見ると「plt.scatter(irisdiff[‘petal length(cm)’],irisdiff[‘petal width(cm)’],c=’black’,\ 」の部分にエラーが出てます。KeyErrorは、辞書型内のキーでエラーが出るから、きっと「petal length(cm)」か「petal width(cm)」のどっちかが原因と推測。
すぐに思い当たる節があって、「鍵かっこ()の大文字と小文字が一致していない!」というオチ。
エラーコード内の1、3、5行目で使ってる大文字鍵かっこの「petal length(cm)」と「petal width(cm)」を8行目で使っている箇所にコピペしてエラー解消!
最初のKeyError状態だと下の画像の散布図が出てきて、正しく図のタイトルからラベルが表示されませんでした。
だけど、KeyErrorをなくしたら綺麗にラベルが出てきて一件落着!
try-except構文の回避策以外にも辞書型定義の大文字と小文字の違いがない様にしなければならないと初歩的なミスに注意です。