2015-03-29 4 views
5

У меня есть этот код:TypeError: должна быть строка, а не юникод

... 
msgdict = {'datafile': datafile, 'mapper': mapper, 'reducer':reducer} 
msg = cPickle.dumps(msgdict) 
print msg 

Отпечаток тзд я получаю это:

(dp1 
S'mapper' 
p2 
(S's3n://myFolder/mapper.py' 
p3 
tp4 
sS'datafile' 
p5 
(S's3n://myFolder/test.txt' 
p6 
tp7 
sS'reducer' 
p8 
(S's3n://myFolder/reducer.py' 
p9 
tp10 
s. 

Тогда Im пытается получить мое содержание:

for i in range(count): 
    m = q[0].read() 
    # this print returns a object Message 
    print m 
    # m.get_body()) returns the same of print msg above 
    msg = cPickle.loads(m.get_body()) 

Но у меня есть этот обет:

msg = cPickle.loads(m.get_body())  
TypeError: must be string, not unicode 

Кто-то знает, как решить эту ошибку?

+0

Вы пробовали 'repr()' все строки? –

+0

Что такое 'm',' q' или 'get_body'? – Daniel

ответ

7

Попробуйте заменить эту строку следующим:

msg = cPickle.loads(str(m.get_body())) 

Бросая str() к m.get_body(), он убеждается, что если строка Юникода, он преобразует его в строку.

+0

Спасибо, ваше решение сработало! – UserX

+0

@UserX без проблем :) –

Смежные вопросы