Python - よく使うモジュール - inspect オブジェクト情報取得
- 1. 概要
- 2. currentframe
- 3. getouterframes
1. 概要
「inspect」というオブジェクト情報を取得するモジュールがあります。
「inspect --- 活動中のオブジェクトの情報を取得する — Python 3.10.0b2 ドキュメント」には、下記のように述べられています。
inspect は、活動中のオブジェクト (モジュール、クラス、メソッド、関数、トレースバック、フレームオブジェクト、コードオブジェクトなど) から情報を取得する関数を定義しており、クラスの内容を調べたり、メソッドのソースコードを取得したり、関数の引数リストを取り出して整形したり、詳細なトレースバックを表示するのに必要な情報を取得したりするために利用できます。
このモジュールの機能は4種類に分類することができます。型チェック、ソースコードの情報取得、クラスや関数からの情報取得、インタープリタのスタック情報の調査です。
おそらくは、「Python3」以降であれば、標準のモジュールで、「Python」をインストールしていれば、特に明示的にインストールする必要はないかと思われます。
わたしは、主にデバッグの目的で使用しています。
わたしの使う関数について、以下に述べます。
2. currentframe
「currentframe」は、呼び出し元のフレームオブジェクトを返します。
inspect.currentframe()
3. getouterframes
「getouterframes」は、指定したフレームと、その外側の全フレームのフレームレコードを返します。
inspect.getouterframes(frame, context=1)
わたしは、よく前項の「currentframe」とあわせて、使います。
下記のようなソースを書いて
import inspect
import os
class Class:
def function():
try:
raise
except Exception as ex:
curr = inspect.currentframe()
info = inspect.getouterframes(curr)[1]
print("[例外発生] (%s:%d)" % (os.path.basename(info.filename), info.lineno), flush=True)
print("[", ex.args, "]")
exit()
Class.function()
実行すると、下記の結果が得られます。
[例外発生] (except01.py:16)
[ ('No active exception to reraise',) ]
|
|