如何在python中创建decorator/wrapper类以将错误日志的属性作为单个参数传递?
类请求(APIView): 我想创建一个装饰器或包装器类,将db_logger.exception()中的参数作为单个参数传递。如何在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, *
主要是,我想用一个参数替换这个字典-->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()