1

関数の行番号と名前をプログラムで取得する方法はありますか?

たとえば、文字列のリストを関数に渡したい:

s = [calling_module, calling_function, line_number]
report(s)

現在、私はすべて手動で入れています:

s = ["module abc", "func()", "line 22", "notes"]
report(s)

しかし、pythonがモジュール名(__name__がそうすると思います)、関数名、および行番号を自動的に入力する方法があるかどうかを知りたいです。方法はありますか?

4

3 に答える 3

2

inspectモジュール関数を使用します。例えば、

import inspect

def b():
    f = inspect.currentframe()
    current = inspect.getframeinfo(f)
    caller = inspect.getframeinfo(f.f_back)
    #caller = inspect.getframeinfo(inspect.getouterframes(f)[1][0])
    print(__name__, current.filename, current.function, current.lineno, caller.function)

def a():
    b()

a()
于 2013-08-04T17:26:48.070 に答える
1

次の行に沿って何かが必要な場合がありますtraceback.extract_stack()

>>> def test():
...   print "In Function"
...   print traceback.extract_stack()
...
>>>
>>> test()
In Function
[('<stdin>', 1, '<module>', None), ('<stdin>', 3, 'test', None)]

ただし、結果を解析する必要があります。

于 2013-08-04T17:26:16.843 に答える