【发布时间】:2021-10-01 08:51:41
【问题描述】:
我想用这样的装饰器转换一些函数参数:
def check_args(*args1):
def decorator(func):
def wrapper(*args, **kwargs):
for i in range(len(args)):
if type(args[i]) == args1[i]:
args[i] = args1[i](args[i])
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@check_args(str, str)
def function(arg1, arg2):
pass
但是当我运行它时,我得到了这个错误:
args[i] = args1[i](args[i ])
TypeError: 'tuple' object does not support item assignment
args[i] is not a tuple, it's an int and that code should translate to 5 = str(5)
你能帮我解决这个问题还是用其他方法来转换参数,但仍然使用装饰器?
【问题讨论】:
-
args是一个元组,就像错误所说的那样,您不能重新分配元组的元素。您需要先将元组转换为列表才能重新分配其中的元素。 -
args一定是tuple,所以不能赋值给tuple的元素。无论如何,你的意思是:if type(args[i]) != args1[i]:?否则每次转换都是没有意义的。 -
@StevieG25 该错误表明它不是该行;它的下一行。类型检查行不会导致该错误。
标签: python python-3.x decorator