Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中创建decorator/wrapper类以将错误日志的属性作为单个参数传递?_Python_Django_Django Rest Framework_Wrapper_Python Decorators - Fatal编程技术网

如何在python中创建decorator/wrapper类以将错误日志的属性作为单个参数传递?

如何在python中创建decorator/wrapper类以将错误日志的属性作为单个参数传递?,python,django,django-rest-framework,wrapper,python-decorators,Python,Django,Django Rest Framework,Wrapper,Python Decorators,类请求(APIView): 我想创建一个装饰器或包装器类,将db_logger.exception()中的参数作为单个参数传递。 主要是,我想用一个参数替换这个字典-->extra={………},这样这个错误记录方法就可以用来记录所有类和方法的错误。检查这个示例,了解如何创建装饰器,以及如何访问包装函数及其参数 from functools import wraps def error_logger(func): @wraps(func) def wrapper(*args, *

类请求(APIView):

我想创建一个装饰器或包装器类,将db_logger.exception()中的参数作为单个参数传递。
主要是,我想用一个参数替换这个字典-->extra={………},这样这个错误记录方法就可以用来记录所有类和方法的错误。

检查这个示例,了解如何创建装饰器,以及如何访问包装函数及其参数

from functools import wraps

def error_logger(func):
    @wraps(func)
    def wrapper(*args, **kwd):
        try:
            return func(*args, **kwd)
        except Exception as e:
            print('Error in ', func.__name__)
            # reference self as: args[0]
    return wrapper

class my_class:
    @error_logger
    def my_function(self):
        return 1/0

if __name__ == '__main__':
    my_class().my_function()

谢谢你的回复。请您解释一下如何通过示例传递参数好吗?@AmarnathJ包装器将环绕并调用原始函数。在python中,函数可以有未命名参数和命名参数。一般来说,它是这样表述的:
*args,**kwd
,您可以按位置引用未命名参数,如:
args[0]、args[1]、…
,或按名称引用命名参数,如:
kwd['name1']、kwd['name2']、…
。对于类,类对象始终作为第一个未命名参数进行访问,即:
args[0]
。在代码中,您可以从包装器访问所有参数,并且它会将所有参数不变地传递给原始函数。
from functools import wraps

def error_logger(func):
    @wraps(func)
    def wrapper(*args, **kwd):
        try:
            return func(*args, **kwd)
        except Exception as e:
            print('Error in ', func.__name__)
            # reference self as: args[0]
    return wrapper

class my_class:
    @error_logger
    def my_function(self):
        return 1/0

if __name__ == '__main__':
    my_class().my_function()