我很难弄清楚我的代码有什么问题,我正在尝试使用python和google app引擎制作一个rot13程序。我一直试图弄清楚问题是什么,但我不能,我的代码工作正常,直到从文本框中获取值,但当我将它传递给rot13函数时,它给我一个500错误,提前谢谢
import webapp2
import cgi
form = """<form method="post">
<textarea name="text" style="height: 100px; width: 400px;"></textarea>
<br>
<br>
<input type="submit"/>
</form>"""
def escape_html(s):
return cgi.escape(s, quote=True)
def rot13(s):
regular = "abcdefghijklmnopqrstuvwxyz"
ciper13 = "nopqrstuvwxyzabcdefghijklm"
s = s.translate(s.maketrans(regular, ciper13))
return s
class MainHandler(webapp2.RequestHandler):
def write_form(self):
self.response.write(form)
def get(self):
#self.response.headers['Content-Type'] = 'text/plain'
self.write_form()
def post(self):
text = self.request.get('text')
text = escape_html(text)
text = rot13(text)
self.response.write(text)
app = webapp2.WSGIApplication([('/', MainHandler)], debug=True)
答案 0 :(得分:1)
问题出在这一行:
>>> s = s.translate(s.maketrans(regular, ciper13))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'maketrans'
maketrans
是string
模块的属性,而不是单个字符串实例的属性。
您需要导入string
模块(import string
)并将代码更改为:
>>> s = s.translate(string.maketrans(regular, ciper13))
另一种方法是使用内置的rot-13编码:
>>> s = u'foo'
>>> s.encode('rot-13')
'sbb'