Python
で例外が発生した際、その詳細なメッセージやデバッグ情報をキャプチャすることは、エラーの原因を特定する上で非常に重要です。以下に、その方法を解説します。
基本的な例外メッセージの取得方法
例外処理では、str(e)
を使用してエラーメッセージを取得するのが一般的です。
try:
1 / 0
except ZeroDivisionError as e:
print(str(e)) # 出力: division by zero
例外の詳細を取得する方法
repr(e)
を使うと、例外クラス名とメッセージを一緒に出力できます。
try:
[][2]
except IndexError as e:
print(repr(e)) # 出力: IndexError('list index out of range')
スタックトレースを含めたログの記録
logging
モジュールのlogger.exception()
を使うことで、エラーのスタックトレースを含むログを簡単に記録できます。例外発生時に、自動的にトレースバックを出力してくれるため、デバッグ時に非常に有用です。
import logging
logging.basicConfig(level=logging.ERROR)
try:
1 / 0
except ZeroDivisionError as e:
logging.exception("An error occurred") # ログにスタックトレースを記録
sys.exc_info()
の使用
sys.exc_info()
を使用すると、発生した例外の詳細な情報(例外のタイプ、値、トレースバック)を取得することができます。これは、エラーメッセージやスタックトレースを手動で処理したい場合に便利です。
import sys
import traceback
try:
1 / 0
except Exception:
exc_type, exc_value, exc_traceback = sys.exc_info()
print(f"Exception type: {exc_type}")
print(f"Exception message: {exc_value}")
print(f"Traceback: {traceback.format_tb(exc_traceback)}")
まとめ
Python
での例外処理は、単にエラーをキャッチするだけでなく、そのメッセージやスタックトレースを正しく取得・記録することが重要です。str(e)
やrepr(e)
で例外メッセージを取得し、logger.exception()
でスタックトレースを含む詳細なログを記録することで、エラーの発生原因を迅速に特定できます。