「exec」で実行するPythonスクリプトがあります。スクリプトによって関数が呼び出されたときに、その呼び出しの行番号とオフセットを知りたいと思います。
ここに例があります。私のスクリプトが次の場合:
foo1(); foo2(); foo1()
foo3()
そして、すべての関数で (line,offset) を出力するコードがある場合、取得する必要があります
(0,0), (0,8), (0,16), (1,0)
ほとんどの場合、これはスタック フレームを取得することで簡単に実行できます。スタック フレームには行番号と関数名が含まれているからです。唯一の問題は、特定の行に同じ名前の関数が 2 つある場合です。残念ながら、これは私にとって一般的なケースです。何か案は?
元のコードを変更するのが最も簡単な解決策のようです。
次のような問題をどのように解決しますか
if foo1(7) or foo1(6):
また
foo2(foo1(), foo1())
これには、あまり洗練されていないソリューションがいくつかあります。たとえば、前の例を自動的に次のように変更します。
def curpos(pos, func):
record_curpos(pos)
return func
curpos(foo2,0)(curpos(foo1,5)(), curpos(foo1,13)())
もっとシンプルなアイデアがあれば教えてください。