0

アプリケーションには多くの定数変数があります。このアプリケーションでは、モジュールをインポートします。テストの一環として、変数の名前とその値を出力するインポートされたモジュールの関数から呼び出したいと思います。

これは私のコードではありませんが、これは私がやりたいことの概念を示しています:

-main.py-
import mymodule
DEBUG = True
BATCH = False
ShowVars(['DEBUG','BATCH'])

-mymodule.py-
def ShowVars(varlist):
  for name in varlist:
    print('{} -> {}').format(name,eval(name))

もちろん、「DEBUGが定義されていません」というeval(name)でエラーが発生しますが、この概念を機能させようとしています。

私が見つけた 1 つの方法は、main.py を次のように変更することです。

-main.py-
import mymodule
DEBUG = True
BATCH = False
mymodule.DEBUG=DEBUG
mymodule.BATCH=BATCH
ShowVars(['DEBUG','BATCH'])

それから物事はうまくいきますが、私はそれが好きかどうかわかりません...どんなアイデアや逸話もいただければ幸いです。

4

4 に答える 4

0

答えてくれてありがとう!あなたの洞察力のおかげで、私は長い道のりを歩むことができました。すべての手法を試してみたところ、inspect モジュールが必要な機能を備えていることがわかりました。しかし、それを実際のコードに実装する作業を行っているうちに、フレーム スタックのどこにいるかが重要になることがわかりました。複数を使用して検査モジュールでそれを達成することができましたが.f_backs、深さを与えることができるため、最終的には sys._getframe() を使用しました。したがって、元の mymodule.py は次のように変更されました。

-mymodule.py-
import sys
import traceback

def ShowVars(varlist):
  depth = len(traceback.extract_stack())-1
  f = sys._getframe(depth)
  for name in varlist:
    print('{} -> {}').format(name,f.f_locals.get(name,f.f_globals.get(name)))
于 2013-10-16T17:55:12.703 に答える