2012-04-28 6 views
19

bitte, kann mir jemand mit dem code weiterhelfen? Wenn ich es die Protokolle laufen sagte:Was erzeugt "TypeError Character Mapping muss Integer zurückgegeben werden ..." in diesem Python-Code?

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 - 

Ich weiß, dass der Fehler in rot13 sein muss(). Aber wenn ich diese Prozedur in der IDE ausführe, funktioniert sie normal.

Hier mein Code:

import webapp2 

form= """ 
    <html> 
    <head> 
    <title>Unit 2 Rot 13</title> 
    </head> 

    <body> 
    <h2>Enter some text to ROT13:</h2> 
    <form method="post"> 
     <textarea name="text" 
       style="height: 100px; width: 400px;"></textarea> 
     <br> 
     <input type="submit"> 
    </form> 
    </body> 

    </html> """ 

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) 

Vielen Dank im Voraus für jede Hilfe!

+0

Ich kann nicht mit Ihrem Code und Ihrer Eingabe reproduzieren (mit 64-Bit-EPD Python 2.7.2 unter Linux). Vielleicht könnten Sie ein kleines vollständiges Beispiel hinzufügen, das für Sie fehlschlägt und mit dem wir experimentieren könnten? – NPE

+0

Danke, aix. Ich denke Andrew hat die Ursache entdeckt. (Der Text wird als Unicode eingegeben). Weißt du, wie ich das repariere? – craftApprentice

Antwort

35

Es ist wahrscheinlich, weil der Text als Unicode eingegeben wird:

>>> 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 "<stdin>", line 1, in <module> 
    File "<stdin>", line 6, in rot13 
TypeError: character mapping must return integer, None or unicode 
>>> 

Diese Frage behandelt, was Sie brauchen:

Wenn Sie sicher sind, dass Unicode-Strings aren 't wichtig, ich denke, Sie könnten nur:

return str(st).translate(tab) 
+0

Danke, Andrew, ich denke du hast Recht. Wie repariere ich das? – craftApprentice

+0

mit weiteren Informationen aktualisiert –

+0

Danke, Andrew. Du hast mir sehr, sehr geholfen. – craftApprentice

Verwandte Themen