【发布时间】:2016-01-28 08:30:45
【问题描述】:
我尝试学习 python 装饰器,因为这些东西非常有用。我了解简单的装饰器是如何工作的,但我试图围绕需要 *args 的函数制作装饰器,但它不起作用。当然,我错过了一些元素。我一直在浏览互联网寻找答案,但我找不到答案。
内部函数将列表中的所有整数相加,包装器应该检查列表中的所有元素是否都是整数。
def wrapper(func):
def inner(*args):
for i in range(0, len(args[0])): #It does not iven get there.
if not isinstance(i, int):
return 'Invaild values.'
else:
return func(*args)
return inner
def add(*args):
result = 0
for i in range(0, len(args[0])):
result += args[0][i]
return result
def main():
numbers = [1, '2', 3, 4]
print(add(numbers))
numbers = [1, 2, 3, 4]
print(add(numbers))
if __name__ == '__main__':
main()
我得到的错误。
Traceback (most recent call last):
File "wrapper_of_function.py", line 23, in <module>
main()
File "wrapper_of_function.py", line 20, in main
print(add(numbers))
File "wrapper_of_function.py", line 15, in add
result += args[0][i]
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
【问题讨论】:
-
你在哪里使用
wrapper? -
@Zetys,我知道,包装的目的是检查
ints中是否有str,如果有,应该返回'Invaild values'。