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

Python中是否存在获取当前函数名的变量?求助替代方法

获取当前函数名称的可行方案

你遇到的问题是__name__是模块级变量,它返回的是当前模块的名称(比如脚本直接运行时会返回__main__),而非当前函数的名称。以下是几种无需手动输入、能动态获取当前函数名的方法:

方法1:利用sys模块的栈帧信息

导入sys模块后,通过栈帧对象直接获取当前函数名:

import sys
import json

def connection_sniffer():
    if gvl.global_program_logging_state:
        # 获取当前函数名称
        func_name = sys._getframe().f_code.co_name
        pythonValues = dict(locals())
        jsonValues = json.dumps(pythonValues)
        write_program_log(func_name, jsonValues)

sys._getframe(0)默认指向当前栈帧,f_code.co_name就是该栈帧对应的函数名称。

方法2:使用inspect模块(更推荐,可读性更强)

inspect是Python标准库中专门用于对象检查的工具,用它获取函数名更规范:

import inspect
import json

def connection_sniffer():
    if gvl.global_program_logging_state:
        # 方式1:通过当前栈帧获取
        func_name = inspect.currentframe().f_code.co_name
        # 方式2:通过栈帧列表获取(更直观)
        # func_name = inspect.stack()[0][3]
        
        pythonValues = dict(locals())
        jsonValues = json.dumps(pythonValues)
        write_program_log(func_name, jsonValues)

方法3:直接引用函数自身的__name__属性(场景受限)

如果不需要通用适配,也可以直接引用函数对象的__name__属性,但这种方式需要和函数名硬绑定,函数改名时需同步修改:

import json

def connection_sniffer():
    if gvl.global_program_logging_state:
        func_name = connection_sniffer.__name__
        pythonValues = dict(locals())
        jsonValues = json.dumps(pythonValues)
        write_program_log(func_name, jsonValues)

额外优化:只记录函数入参

你当前用locals()会获取函数内所有局部变量(包括后续定义的变量),如果只想记录函数的输入参数,可以结合inspect.signature过滤:

import inspect
import json

def connection_sniffer(param1, param2):
    if gvl.global_program_logging_state:
        func_name = inspect.currentframe().f_code.co_name
        # 提取函数签名中的入参,只保留入参对应的变量
        sig = inspect.signature(connection_sniffer)
        params = {k: locals()[k] for k in sig.parameters}
        jsonValues = json.dumps(params)
        write_program_log(func_name, jsonValues)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:40:35