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

Python如何动态获取当前模块、类及函数名称用于日志输出?

在Python中动态获取模块、函数名称用于日志输出

刚好我之前也做过类似的需求,其实Python本身提供了不少内置属性和模块来帮我们实现这个功能,不用硬编码名称,完全可以动态获取。下面分步骤给你讲清楚:

一、基础实现:获取模块名+函数名

要实现你要的效果,我们可以结合os模块和inspect模块(或者用Python的内部栈信息)来获取这些名称,直接上代码示例:

import os
import inspect

def my_function():
    # 获取当前函数的代码对象,进而拿到函数名
    func_code = inspect.currentframe().f_code
    func_name = func_code.co_name
    # 从当前脚本路径中提取文件名(比如my_script.py)
    module_name = os.path.basename(__file__)
    
    # 先打印日志信息
    print(f"[日志] 模块: {module_name}, 函数: {func_name} 正在执行")
    # 再打印你要的内容
    print("hallo")

if __name__ == "__main__":
    my_function()

运行这个脚本后,输出会是:

[日志] 模块: my_script.py, 函数: my_function 正在执行
hallo

代码解释:

  • inspect.currentframe().f_code:inspect模块是Python专门用于检查运行时对象的工具,currentframe()获取当前执行的栈帧,f_code就是当前函数的代码对象,co_name属性就是函数的名称。
  • os.path.basename(__file__):__file__是每个Python脚本都会有的内置属性,存储当前脚本的完整路径,用basename()可以提取出最后的文件名(比如/home/user/my_script.py会变成my_script.py)。

二、简化版:不用inspect模块

如果你不想导入inspect,也可以用Python的内部栈接口sys._getframe()来实现,代码更短:

import sys
import os

def my_function():
    # 直接从栈帧中获取函数名
    func_name = sys._getframe().f_code.co_name
    module_name = os.path.basename(__file__)
    
    print(f"[日志] 模块: {module_name}, 函数: {func_name}")
    print("hallo")

if __name__ == "__main__":
    my_function()

不过要注意,sys._getframe()属于Python的内部接口,官方不保证未来版本会兼容,所以生产环境更推荐用inspect模块。

三、扩展:如果是类中的方法

如果你的代码是在类里,想要获取类名+方法名+模块名,也很简单,结合self.__class__.__name__就能拿到类名:

import os
import inspect

class MyClass:
    def my_method(self):
        class_name = self.__class__.__name__
        method_name = inspect.currentframe().f_code.co_name
        module_name = os.path.basename(__file__)
        
        print(f"[日志] 模块: {module_name}, 类: {class_name}, 方法: {method_name}")
        print("hallo from class method")

if __name__ == "__main__":
    obj = MyClass()
    obj.my_method()

执行后输出:

[日志] 模块: my_script.py, 类: MyClass, 方法: my_method
hallo from class method

这样不管你怎么修改函数、类或者脚本的名称,日志里的信息都会自动更新,不用手动修改字符串,非常方便维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:26:29