以下のサンプル コードでは、装飾された関数の呼び出し先のスタック フレームを取得するつもりです。装飾された関数 power(below) が pwr 関数を呼び出し、例外があり、pwr のスタック フレーム (関数の引数を出力するため) を取得したいとします。APIで公開されている関数については、その引数と応答が出力されますが、モジュールの内部にある関数とAPIが呼び出す関数については、それらのスタックフレームを取得したいと思います.
import inspect
def api(func):
def decor(*args, **kwargs):
try:
print "Request %s %s %s" % ( func.__name__, args, kwargs)
response = func(*args,**kwargs)
print "response %s", response
return response
except Exception, e:
print "exception in %s", func.__name__
for frame in inspect.stack():
print frame[3]
raise e
return decor
@api
def power(a,b):
return pwr(a,b)
def pwr():
...
...
コードを実行すると、例外中に装飾からスタック フレームが取得されますが、func またはそれ以下では取得されません。誰でも提案できますか?