Вот предположение. Сообщение:
TypeError: unsupported operand type(s) for +: 'int' and 'unicode'
относится к фрагменту:
map(sum,zip(*,input))
и это означает, что вы пытаетесь взять сумму в виде кортежа unicode, например. [u'1', u'2']
, а не кортеж целых чисел, например. [1,2]
как вы думаете, с чем вы работаете.
Если это так, то вы можете поместить zip в списковое понимание для преобразования из 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))
...
to:
def func(input):
print(map(type, input))
print(map(type, *))
aa = map(sum,zip(*,input))
person
rocky
schedule
31.05.2015