El descriptor ‘join’ requiere un objeto ‘Unicode’ pero recibió un ‘str’

Código adaptado desde aquí :

#from 'foo_bar' to 'Foo.Bar' def lower_case_underscore_to_camel_case(self, string): print string class_ = string.__class__ return class_.join('.', map(class_.capitalize, string.split('_'))) 

Salida:

 client_area TypeError: descriptor 'join' requires a 'unicode' object but received a 'str' 

Especialmente decepcionante ya que el código fuente dice:

“” “Convierta una cadena o unicode del guión bajo a un camello” “”

¿Cómo arreglar esto?


Solución fácil:

 return str.join('.', map(class_.capitalize, string.split('_'))) 

¿Alguien podría explicarme el proceso general?

El código parece introducir una complejidad innecesaria, pero puede hacerlo así:

 #from 'foo_bar' to 'FooBar' def lower_case_underscore_to_camel_case(self, string): print string class_ = string.__class__ return class_.join(class_('.'), map(class_.capitalize, string.split('_'))) 

Y realmente podrías acortar la última línea para ser:

 return class_('.').join(map(class_.capitalize, string.split('_'))) 

Además, a juzgar por el código, recibirás algo como ” Foo.Bar ” (nota un punto) de ” foo_bar “.