Qu'est-ce qui produit "TypeError character mapping must return integer..." dans ce code python?
s'il vous plaît, quelqu'un peut m'aider avec le code soufflet? Quand je l'ai lancé les logs ont dit:
return method(*args, **kwargs)
File "C:UsersCGDocumentsudacityrot13serendipomain.py", line 51, in post
text = rot13(text)
File "C:UsersCGDocumentsudacityrot13serendipomain.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 -
je sais que l'erreur doit être dans rot13(). Mais quand j'exécute cette procédure dans L'IDE, ça marche normalement.
Voici mon 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)
merci à l'avance pour toute aide!
20
demandé sur
craftApprentice
2012-04-29 00:32:42
1 réponses
C'est probablement parce que le texte est entré en 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 "<stdin>", line 1, in <module>
File "<stdin>", line 6, in rot13
TypeError: character mapping must return integer, None or unicode
>>>
cette question couvre ce dont vous avez besoin:
si vous êtes sûr que les chaînes unicode ne sont pas importantes, je suppose que vous pourriez juste:
return str(st).translate(tab)
35
répondu
Andrew Barrett
2017-05-23 12:25:10