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

Python自定义调试打印函数如何无需显式传参获取调用方的vars()

优化实现方案

可以通过Python标准库inspect模块读取调用栈的上层帧对象,直接获取调用方的局部变量集合,无需手动传入vars(),最终实现代码如下:

import inspect

def dprint(*varnames):
    # 获取调用当前函数的上层栈帧
    caller_frame = inspect.currentframe().f_back
    # 栈帧的f_locals属性等价于调用方执行时的vars()返回值
    varslist = caller_frame.f_locals
    # 兼容不存在的变量可选写法:用get避免KeyError
    string = [f"{var}: {varslist.get(var, '<变量未定义>')}" for var in varnames]
    print("\n".join(string))
    # 手动释放帧对象,避免循环引用导致内存泄漏
    del caller_frame

调用示例

a = 5
b = 7
dprint("a", "b")

输出效果:

a: 5
b: 7

补充说明

  • 若需要同时支持查找全局变量,可将varslist替换为{**caller_frame.f_globals, **caller_frame.f_locals},优先级为局部变量覆盖全局变量
  • 栈帧操作属于Python解释器内部特性,仅建议调试场景使用,不要在生产环境核心逻辑中引入
  • 上述实现兼容所有主流Python3版本

内容的提问来源于stack exchange,提问作者8l2s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:27:00