我正在使用App Engine的webapp。此请求处理程序输出带有文本字段的表单。提交时,它会获取文本并将<h1>
标记添加到以#
开头的行。我使用repr()
将文本拆分为行列表,并使用eval()
分析来自每行的文本,而不是来自u'
的字符串来自repr()
{1}}。
class Test(webapp.RequestHandler):
def get(self):
self.response.out.write('<form method=\'post\' action=\'\'>')
self.response.out.write('<textarea name=\'text\'></textarea>')
self.response.out.write('<input type=\'submit\' value=\'Submit\'/>')
self.response.out.write('</form>')
def post(self):
output = []
for line in repr(self.request.get('text')).split('\\n'):
if eval(line)[0] == '#':
output.append('<h1>'+line+'</h1>')
else:
output.append(line)
self.response.out.write('\\n'.join(output))
现在代码的方式,它给了我这个错误:
File "<string>", line 1
u'#somestring\r
^
SyntaxError: EOL while scanning string literal
如果我只使用line[0]
代替eval(line)[0]
,那么一切正常,但它不适用于第一行。即使第一行以#
开头,条件也会转到else
,因为第一个字符将是u'
而不是#
。尝试使用eval()
来解决这个错误。我该如何解决这个问题?
答案 0 :(得分:4)
要拆分文本,字符串有一个内置的splitlines
方法:
for line in self.request.get('text').splitlines():
... do whatever ...
然后,要查看特定行是否以#
开头,请尝试以下操作:
if line.strip()[0]=='#':
... do whatever ...
放在一起:
for line in self.request.get('text').splitlines():
if line.strip()[0] == '#':
... do whatever ...