我创建了一个装饰厂由一个自定义的日志记录功能参数,像这样:如何在Python 3中修饰部分应用的函数?
def _log_error(logger):
def decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
try:
return f(*args, **kwargs)
except Exception as e:
logger(e)
return None
return wrapper
return decorator
我现在想用它来装点一个部分应用的函数foo:
foo = partial(bar, someparam)
我已经尝试了所有的以下内容:
@_log_error(logger)
foo = partial(bar, someparam)
log_error = _log_error(logger)
@log_error
foo = partial(...)
foo = partial(...)
@log_error
foo
@log_error
(foo = partial(...))
AFAICT都log_error = _log_error(logger)/@log_error
和@_log_error(logger)
似乎产生的dec的完全有效的方法orator并且它在正常声明的函数上工作正常。但是,当试图在部分应用的函数上使用时,我在foo =
开始处得到语法错误,并且在使用装饰器时产生优秀的资源,而在一般情况下functools.partial
在这个特定情况下没有给我任何提示。
Monads in Python!打的好。 –