这是一个猜测。消息:
TypeError: unsupported operand type(s) for +: 'int' and 'unicode'
指的是片段:
map(sum,zip(*,input))
这意味着您正在尝试将总和作为一个 unicode 元组,例如[u'1', u'2'] 而不是 int 的元组,例如[1,2] 你认为你正在使用。
如果是这种情况,那么您可以将 zip 包裹在 list comprehension 中以进行从 unicode 到 int 的转换:
[map(int, a) for a in zip(*,input)]
但是您可能还潜伏着另一个错误。从@outputSchema('aa:chararray') 判断,您想要返回一个字符串列表,而不是单个字符串; str([1,2]) 是 "[1,2]",我想你想要 ["1", "2"]。如果是这种情况(您可能不应该检查),您也可以将其包装在列表理解中:
aa = [str(s) for s in aa]
结合这两个变化,你的代码变成:
@outputSchema('aa:chararray')
def func(input):
aa = map(sum,[map(int, a) for a in zip(*,input)])
aa = [map(str, a) for a in aa]
return aa
如果您无法从这里解决问题,那么了解更多信息会很有帮助。例如,该类型错误是否指向代码中的特定行?如果有,是哪条线?
也许您可以显示input 或* 的类型。例如,将您的功能更改为:
...
def func(input):
aa = map(sum,zip(*,input))
...
到:
def func(input):
print(map(type, input))
print(map(type, *))
aa = map(sum,zip(*,input))