【发布时间】:2020-05-06 23:25:11
【问题描述】:
我有一个装饰器,用于抑制和记录函数中的异常。代码是这样的:
def log_exceptions(func):
def wrapper(*args, **kwargs):
try:
ret = func(*args, **kwargs)
except Exception as e:
print(e)
print(args, kwargs) # also log what arguments caused the exception
return ret
return wrapper
这里的一个问题是,很难手动将打印的参数值与函数的参数名称匹配,因为位置参数也可以进入kwargs,并且可能有args 和kwargs 参数在内部函数中也是如此。因此,将包装器中的 args 和 kwargs 值与内部函数中的参数名称相匹配会很有用。
那么我的问题是,有没有内置的方法来进行这种匹配?如果不是,那么实现它的优雅方式是什么?
【问题讨论】:
-
另见this one
-
@Pynchia:这是解决方案的一部分,但它没有显示如何执行匹配。 (诚然,这是困难的部分——实现
bind比实现signature更简单,所需知识更少——但重新实现bind仍然是很多毫无意义的工作。)
标签: python parameter-passing python-decorators keyword-argument