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',) ]

audiobook.jp
AbemaTV 無料体験
EaseUS
アフィリエイトのアクセストレード
ハイスピードプラン
5G CONNECT
サウンドハウス
それがだいじWi-Fi
葬送のフリーレン Prime Video
【usus ウズウズ】
EMEET 1
Amazonギフトカード
TikTok Shop 【リピート用プログラム】
ベルリッツ
earthcar(アースカー)
損保との違い
JETBOY
健康サポート特集
薬屋の独り言
U-NEXT
ネットオークションの相場、統計、価格比較といえばオークファン