我正在写一个装饰器,它会在函数调用中为不正确的参数数量捕获TypeError,并将打印自定义消息。该代码是在这里:在装饰器中保存签名python 2
import inspect
def inspect_signature(f):
def decorate(*args, **kwargs):
try:
f(*args, **kwargs)
except TypeError as e:
print('Failed to call "{}" with signature {}. Provided args={} and kwargs={}.'.format(
f.__name__, inspect.getargspec(f).args, args, kwargs))
return f
return decorate
@inspect_signature
def func(foo, bar):
pass
func('a')
func('a', 'b')
我得到以下输出:
Failed to call "func" with signature ['foo', 'bar']. Provided args=('a',) and kwargs={}.
Called successfully with foo=a, bar=b
ArgSpec(args=[], varargs='args', keywords='kwargs', defaults=None)
函数签名是空的。请给我一个解决方案,我该如何保留它?
PS:我使用的是python2,无法切换到python3。
我已更新答案。你有这个吗? –