¿Qué está produciendo “La asignación de caracteres TypeError debe devolver un entero …” en este código de python?

Por favor, ¿puede alguien ayudarme con el código abajo? Cuando lo ejecuté los logs decían:

return method(*args, **kwargs) File "C:\Users\CG\Documents\udacity\rot13serendipo\main.py", line 51, in post text = rot13(text) File "C:\Users\CG\Documents\udacity\rot13serendipo\main.py", line 43, in rot13 return st.translate(tab) TypeError: character mapping must return integer, None or unicode INFO 2012-04-28 20:02:26,862 dev_appserver.py:2891] "POST / HTTP/1.1" 500 - 

Sé que el error debe estar en rot13 (). Pero cuando ejecuto este procedimiento en el IDE funciona normalmente.

Aquí mi código:

 import webapp2 form= """   Unit 2 Rot 13   

Enter some text to ROT13:


""" def rot13(st): import string tab1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' tab2 = 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM' tab = string.maketrans(tab1, tab2) return st.translate(tab) class MainHandler(webapp2.RequestHandler): def get(self): self.response.out.write(form) def post(self): text = self.request.get("text") text = rot13(text) self.response.out.write(text) app = webapp2.WSGIApplication([('/', MainHandler)], debug=True)

¡Gracias de antemano por cualquier ayuda!

Probablemente es porque el texto se ingresa como Unicode:

 >>> def rot13(st): ... import string ... tab1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' ... tab2 = 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM' ... tab = string.maketrans(tab1, tab2) ... return st.translate(tab) ... >>> rot13('test') 'grfg' >>> rot13(u'test') Traceback (most recent call last): File "", line 1, in  File "", line 6, in rot13 TypeError: character mapping must return integer, None or unicode >>> 

Esta pregunta cubre lo que necesitas:

  • ¿Cómo consigo que str.translate trabaje con cadenas Unicode?

Si está seguro de que las cadenas de Unicode no son importantes, supongo que podría:

 return str(st).translate(tab)