gpt4 book ai didi

python - 如何在 Python 代码中查找列号

转载 作者:行者123 更新时间:2023-11-28 17:41:56 24 4
gpt4 key购买 nike

小问题:当一个函数被调用时,我可以找到行号 here

同样,如何找到列号?

长问题:

def col():
return something

print("result", col(), col(), col())

应该返回彼此不同的数字,每当调用此打印函数时返回相同的数字。

我该怎么做?

编辑:

我现在的解决方法如下:

import inspect
def cid():
f = inspect.currentframe().f_back
caller_id = (f.f_lineno, f.f_lasti)
return caller_id

print((cid(), cid(), cid(), cid(), cid()))
print((cid(), cid(), cid(), cid(), cid()))
print((cid(), cid(), cid(), cid(), cid()))
print((cid(), cid(), cid(), cid(), cid()))

print((cid(),
cid(),
cid(),
cid(),
cid()))

按预期工作(目前)。这打印:

((8, 30), (8, 36), (8, 42), (8, 48), (8, 54))
((9, 65), (9, 71), (9, 77), (9, 83), (9, 89))
((10, 100), (10, 106), (10, 112), (10, 118), (10, 124))
((11, 135), (11, 141), (11, 147), (11, 153), (11, 159))
((13, 170), (14, 176), (15, 182), (16, 188), (17, 194))

问题:我一时不知道f_lasti到底带来了什么。

最佳答案

the official documentation中可以看出,它确实返回字节码中最后执行的字节的索引。这基本上就是专栏,但不是在源代码中,而是在字节码中。您可以通过 dis.dis() 反汇编代码以理解 f_lasti 中的值:

import inspect
import dis
def cid():
f = inspect.currentframe().f_back
dis.dis(f.f_code)
caller_id = (f.f_lineno, f.f_lasti)
return caller_id

print((cid(), cid(), cid(), cid(), cid()))

我认为python在编译后不会保留字节码和列之间的映射。如果我是对的,基本上不可能得到列号。

关于python - 如何在 Python 代码中查找列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23044872/

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