2012-04-28 3 views
19

してください、誰かがコードの蛇を私に助けることができますか? 私はそれを実行すると、ログは言った:このPythonコードでは、 "TypeError文字マッピングは整数を返す必要があります..."を生成していますか?

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 - 

は、私はエラーが(ROT13でなければなりません知っています)。しかし、私がIDEでこの手順を実行すると、正常に動作します。

ここに私のコード:任意の助けを事前に

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) 

ありがとう!

+0

あなたのコードとあなたの入力(Linux上の64ビットEPD Python 2.7.2を使用して)を再現することはできません。おそらく、あなたのために失敗し、実験することができる小さな完全な例を含めることができますか? – NPE

+0

ありがとう、aix。私はアンドリューが原因を発見したと思う。 (テキストはユニコードとして入力されています)。私はそれをどのように修正するか知っていますか? – craftApprentice

答えて

35

テキストが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 
>>> 

この質問は何が必要カバー:

あなたがUnicode文字列が上がらないことが確実な場合大事なことだと思います。

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

ありがとう、アンドリュー、私はあなたが正しいと思います。どうすれば修正できますか? – craftApprentice

+0

詳細情報を更新 –

+0

ありがとう、アンドリュー。あなたは私を非常に助けてくれました。 – craftApprentice

関連する問題