Python inspect模块的问题

1 投票
2 回答
804 浏览
提问于 2025-04-16 19:00

如何写一个程序来“识别函数调用的行号?”

Python的inspect模块提供了一些方法来找到行号,不过,

def di():
  return inspect.currentframe().f_back.f_lineno 

这段Python代码可以打印出当前的行号。

2 个回答

0

我发布了一个叫做 inspect 的工具的封装,使用简单的堆栈帧地址,只需要一个参数 spos 就可以覆盖堆栈帧:

例如,使用这个代码:

pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)

这里 spos=0 表示库函数,spos=1 表示调用这个函数的地方,spos=2 则是调用这个调用者的地方,依此类推。

3

为什么不使用 inspect.stack() 呢?

def get_caller_lineno():
    frame, _, lineno, _, _, _ = inspect.stack()[1]
    return lineno

撰写回答