PythonでのKeyErrorの対処方法とは?KeyErrorが発生するケース
- システム
エンジニア - PythonのKeyErrorについて教えてください。
- プロジェクト
マネージャー - 分かりました。どのような場合にKeyErrorが発生するか、KeyErrorの回避方法、自分でKeyErrorを発生させる方法などを紹介しましょう。
PythonでのKeyErrorの対処方法とは?
今回は、PythonでのKeyErrorについて説明します。どのような場合にKeyErrorが発生するか、KeyErrorの回避方法、自分でKeyErrorを発生させる方法などを紹介します。
PythonでのKeyErrorに興味のある方はぜひご覧ください。
KeyErrorが発生するケース
PythonでKeyErrorの例外が発生するケースを紹介します。存在しないキーにアクセスしようとすると、KeyErrorが発生します。実際のソースコードを見てみましょう。
1
2
3
|
mydict = {"red": "あか", "green": "みどり", "blue": "あお"}
print(mydict["white"])
|
実行結果は以下のようになります。
1
2
3
4
|
Traceback (most recent call last):
File "Main.py", line 3, in <module>
print(mydict["white"])
KeyError: 'white'
|
KeyErrorが発生していることが分かります。
pop関数でも同様です。
1
|
mydict.pop("white")
|
実行結果は以下のようになります。
1
2
3
4
|
Traceback (most recent call last):
File "Main.py", line 3, in <module>
mydict.pop("white")
KeyError: 'white'
|
delでも同様にKeyErrorが発生します。
1
|
del mydict["white"]
|
実行結果は以下のようになります。
1
2
3
4
|
Traceback (most recent call last):
File "Main.py", line 3, in <module>
del mydict["white"]
KeyError: 'white'
|
例外処理
PythonでKeyError回避する方法として、例外処理があります。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
|
mydict = {"red": "あか", "green": "みどり", "blue": "あお"}
try:
# KeyErrorの発生する可能性がある処理
mydict.pop("white")
except KeyError:
# KeyErrorが発生した場合の処理
print('No such key')
|
実行結果は以下のようになります。
1
|
No such key
|
キーの存在確認後にアクセス
PythonでKeyError回避する方法として、キーの存在確認後にアクセスする方法があります。「in」、「not in」でキーの存在確認ができます。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
mydict = {"red": "あか", "green": "みどり", "blue": "あお"}
# inでkeyに含まれているか確認
if 'red' in mydict:
print(mydict['red'])
else:
print("mydict does not have 'red' key")
if 'white' in mydict:
print(mydict['white'])
else:
print("mydict does not have 'white' key")
# not inでkeyに含まれていないか確認
if 'green' not in mydict:
print("mydict does not have 'green' key")
else:
print(mydict['green'])
if 'black' not in mydict:
print("mydict does not have 'black' key")
else:
print(mydict['black'])
|
実行結果は以下のようになります。
1
2
3
4
|
あか
mydict does not have 'white' key
みどり
mydict does not have 'black' key
|
get関数を使用する
PythonでKeyError回避する方法として、get関数を使用する方法があります。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
mydict = {"red": "あか", "green": "みどり", "blue": "あお"}
# 存在する場合はvakueが取得される
print(mydict.get('red'))
# あか
# 存在しない場合は、「None」になる
print(mydict.get('white'))
# None
# 存在しない場合は、第2引数の値になる
print(mydict.get('black', 'default value'))
# default value
# もとの辞書は変更されない
print(mydict)
# {'red': 'あか', 'green': 'みどり', 'blue': 'あお'}
|
実行結果は以下のようになります。
1
2
3
4
|
あか
None
default value
{'red': 'あか', 'green': 'みどり', 'blue': 'あお'}
|
キーが存在しなければ要素追加
Pythonでは、キーが存在しなければ要素を追加することができます。setdefault関数を使用します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
|
mydict = {"red": "あか", "green": "みどり", "blue": "あお"}
keys = ["red", "green", "blue", "white", "black"]
for key in keys:
# keyが存在しない場合のみ追加
mydict.setdefault(key, "value")
print(mydict)
# {'red': 'あか', 'green': 'みどり', 'blue': 'あお', 'white': 'value', 'black': 'value'}
|
実行結果は以下のようになります。
1
|
{'red': 'あか', 'green': 'みどり', 'blue': 'あお', 'white': 'value', 'black': 'value'}
|
存在確認が不要なので、処理がシンプルです。
KeyErrorを無視
PythonでKeyErrorの例外を無視する方法を紹介します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
|
mydict = {"red": "あか", "green": "みどり", "blue": "あお"}
keys = ["red", "green", "blue", "white", "black"]
for key in keys:
try:
print(mydict[key])
except KeyError:
# KeyErrorを無視する
continue
|
実行結果は以下のようになります。
1
2
3
|
あか
みどり
あお
|
発生したKeyErrorを無視して、ループを継続しています。
自分でKeyErrorを発生させる
Pythonでは自分でKeyErrorの例外発生させることができます。raiseを使用します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
mydict = {}
def add_mydict(key):
if key == '' or not key.isalpha():
# KeyErrorの例外を発生させる
raise KeyError('non-isalpha character in key:' + key)
else:
# 辞書に要素の追加
mydict[key] = 'value'
keys = ["red", "green", "blue", "1", ""]
for key in keys:
try:
add_mydict(key)
except KeyError as e:
# KeyErrorの例外を表示
print(e)
print(mydict)
# {'red': 'value', 'green': 'value', 'blue': 'value'}
|
実行結果は以下のようになります。
1
2
3
|
'non-isalpha character in key:1'
'non-isalpha character in key:'
{'red': 'value', 'green': 'value', 'blue': 'value'}
|
- システム
エンジニア - よく分かりました。いざというときに試してみます。
- プロジェクト
マネージャー - ご自身でソースコードを書いてみるといいです。そうすると、理解が深まります。
まとめ
いかがでしたでしょうか。PythonでのKeyErrorについて説明しました。どのような場合にKeyErrorが発生するか、KeyErrorの回避方法、自分でKeyErrorを発生させる方法などを紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
Python新着案件New Job
-
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都豊島区(池袋駅) -
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都豊島区(池袋駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅) -
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円東京都都内(-駅) -
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円東京都都内(-駅)