PythonでKeyError例外をキャッチする方法をわかりやすく解説
Pythonでは、辞書(dict)に存在しないキーを使って値へアクセスしようとすると、KeyError例外が発生します。この記事では、try-except文を使ってKeyErrorをキャッチし、例外の種類や詳細情報を確認する方法を解説します。
KeyErrorが発生する仕組み
次のコードは、辞書に存在しないキー 'c' で値を取得しようとしているため、KeyErrorが発生します。sys.exc_info() を使うと、発生した例外の型などの情報を取得できます。
import sys
try:
s = {'a': 5, 'b': 7}['c']
except:
print(sys.exc_info())
実行結果
(<class 'KeyError'>, KeyError('c'), <traceback object at 0x0000000003203748>)
出力には、例外の型(KeyError)、例外オブジェクト(見つからなかったキー名 'c')、トレースバックオブジェクト の3つの情報がタプル形式で格納されています。これにより、どのキーが原因で例外が発生したのかを特定できます。
より実践的な例外処理の書き方
sys.exc_info() の代わりに、as 句を使うと、より読みやすくモダンなコードになります。例外オブジェクトから直接キー名を取得できます。
try:
s = {'a': 5, 'b': 7}['c']
except KeyError as e:
print(f"キー '{e}' は辞書に存在しません")
get()メソッドでKeyError自体を回避する
そもそも例外を発生させたくない場合は、get() メソッドが便利です。キーが存在しない場合でも、指定したデフォルト値を返すため、プログラムが中断されません。
s = {'a': 5, 'b': 7}.get('c', 0)
print(s) # 0 が出力される
まとめ
- 存在しないキーで辞書にアクセスすると、KeyError例外が発生する
- try-except文でキャッチし、
sys.exc_info()で例外の型や詳細情報を取得できる except KeyError as eの形式を使うと、より簡潔で可読性の高いコードになるget()メソッドを使えば、デフォルト値を返して例外の発生自体を防げる
-
PythonでIOError例外をキャッチする方法【初心者向けにわかりやすく解説】
IOError例外とは? IOError(入出力エラー)は、入出力操作が失敗したときに発生する例外です。代表的な例としては、存在しないファイルをopen()関数で開こうとした場合や、OSに関連するエラーが発生した場合などが挙げられます。 なお、Python 3ではIOErrorはOSErrorの別名(エイリアス)となっており、どちらの名前で捕捉しても同じ例外を受け取ることができます。 try-exceptブロックで例外を処理する ファイルを開く処理などをtryブロック内に記述すると、入出力例外が発生した際にexceptブロックで適切に処理できます。以下に具体的なコード例を示します。 コード例(
-
Pythonで例外の詳細情報(種類・メッセージ・行番号)を取得する方法
Pythonの例外情報を取得するとはPythonのコードが例外(Exception)をスローした場合、それを捕捉して、例外の種類、エラーメッセージ、トレースバックを表示できます。さらに、例外が発生したファイル名や行番号といった情報もPythonスクリプト内で取得することが可能です。sys.exc_info()で取得できる3つの要素例外発生時には、type(型)、value(値)、traceback(トレースバック)という3つのパラメータからエラーの詳細を把握できます。type: 発生した例外の種類(クラス)を示します。value: エラーメッセージそのものが格納されています。traceback