You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从零实现可返回自身被调用行号的自定义函数?

Python无第三方依赖获取函数调用行号实现方案

完全可以实现,我们只需要用到Python标准库自带的inspect模块即可,不需要安装任何第三方依赖。

实现原理

Python的inspect.stack()方法会返回当前调用栈的帧列表,列表索引为0的元素是当前正在执行的函数自身的栈帧,索引为1的元素就是调用当前函数的上层栈帧,栈帧对象的lineno属性对应当前栈帧执行位置的代码行号。

代码实现

import inspect

def get_caller_line() -> int:
    # 取调用栈的第1层,即调用当前函数的位置栈帧
    caller_stack = inspect.stack()[1]
    line_num = caller_stack.lineno
    # 可选:手动释放栈帧避免内存占用
    del caller_stack
    return line_num

测试用例

你可以用下面的代码测试功能是否符合预期:

def demo():
    # 此处调用会返回下一行的行号
    print(get_caller_line())

if __name__ == "__main__":
    demo() # 输出demo函数内部调用get_caller_line的行号
    # 此处调用会返回下一行的行号
    print(get_caller_line()) # 输出当前调用行的行号

注意事项

  • 如果你需要获取更上层的调用链路行号,只需调整inspect.stack()的索引即可,比如要获取调用者的上层调用行号,将索引改为2即可
  • 手动删除用过的栈帧对象可以避免不必要的内存引用,简单场景下可以省略该步骤
  • 该实现兼容所有Python 3.6及以上的主流版本

内容的提问来源于stack exchange,提问作者Tee Uno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:15:03