如何在 Python 代码中找到列数
如何在 Python 代码中找到列数
简短问题:在此处提到可以找到函数调用时的行号。
同样,我如何找到列号?
长问题:
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在某个时刻具体带来什么。
admin 更改状态以发布 2023年5月22日
如官方文档所示,它确实返回字节码中最后执行字节的索引。那基本上就是列了,但不是在源代码中,而是在字节码中。你可以通过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在编译后会保留字节码和列之间的映射。如果我没错的话,基本上是不可能获得列号的。