相关疑难解决方法(0)

在Python中的另一个函数中获取调用函数名称?

如果你有两个功能,如:

def A
def B
Run Code Online (Sandbox Code Playgroud)

和A打电话给B,你能得到谁在B里面叫B,比如:

def A () :
    B ()

def B () :
    this.caller.name
Run Code Online (Sandbox Code Playgroud)

python debugging

110
推荐指数
5
解决办法
7万
查看次数

在Python记录器中覆盖lineno的最佳方法

我编写了一个装饰器,它记录用于调用特定函数或方法的参数.如下图所示,除了报告logRecord的行号是装饰器的行号而不是func正在包装的行号之外,它运行良好:

from functools import wraps
import inspect
import logging

arg_log_fmt = "{name}({arg_str})"


def log_args(logger, level=logging.DEBUG):
    """Decorator to log arguments passed to func."""
    def inner_func(func):
        line_no = inspect.getsourcelines(func)[-1]

        @wraps(func)
        def return_func(*args, **kwargs):
            arg_list = list("{!r}".format(arg) for arg in args)
            arg_list.extend("{}={!r}".format(key, val)
                            for key, val in kwargs.iteritems())
            msg = arg_log_fmt.format(name=func.__name__,
                                     arg_str=", ".join(arg_list))
            logger.log(level, msg)
            return func(*args, **kwargs)
        return return_func

    return inner_func

if __name__ == "__main__":
    logger = logging.getLogger(__name__)
    handler = logging.StreamHandler()
    fmt = "%(asctime)s %(levelname)-8.8s [%(name)s:%(lineno)4s] %(message)s"
    handler.setFormatter(logging.Formatter(fmt)) …
Run Code Online (Sandbox Code Playgroud)

python logging decorator

10
推荐指数
3
解决办法
1966
查看次数

标签 统计

python ×2

debugging ×1

decorator ×1

logging ×1