我有一个使用“exec”运行的 python 脚本。当脚本调用函数时,我希望它知道该调用的行号和行中的偏移量。
这是一个例子。如果我的脚本是:
foo1(); foo2(); foo1()
foo3()
如果我有在每个函数中打印 (line,offset) 的代码,我应该得到
(0,0), (0,8), (0,16), (1,0)
在大多数情况下,这可以通过获取堆栈帧轻松完成,因为它包含行号和函数名称。唯一的问题是在某一行中有两个同名的函数。不幸的是,这对我来说很常见。有任何想法吗?
好的,更改原始代码似乎是最简单的解决方案。
你将如何解决诸如
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)())
如果您有更简单的想法,请告诉我。