如何在Python代码中查找列号

如何在Python代码中查找列号,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,

简短问题:我可以在调用函数时找到行号,如中所述

类似地,如何查找列号

长问题:

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现在到底带来了什么

如中所示,它确实返回字节码中最后执行的字节的索引。这基本上是列,但不是源代码,而是字节码。您可以通过
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不会在编译后保留字节码和列之间的映射。如果我是对的,基本上不可能得到列号。

你能准确写出每个示例打印的内容吗?第一个是伪代码,我为第二个添加了输出。字节码中的列号对于我来说已经足够了。