gpt4 book ai didi

python - 在运行时识别 python 脚本行中的函数调用

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:56 24 4
gpt4 key购买 nike

我有一个使用“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)())

如果您有更简单的想法,请告诉我。

最佳答案

Python 不提供大量有关行中字符偏移的信息。

如果您使用 exec 来执行 Python,那么您可以在执行代码之前机械地重写代码以告诉您您想知道的内容。例如,您可以更改原始代码:

foo1(); foo2(); foo1()
foo3()

注释代码:

curpos(1,0); foo1(); curpos(1,8); foo2(); curpos(1,16); foo1()
curpos(2,0); foo3()

然后执行注释代码。

其中curpos(line,char)记录或打印了原代码中该点的行和字符信息。这比处理堆栈框架要简单得多。

关于python - 在运行时识别 python 脚本行中的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2829818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com