Python на Appengine: ошибка с eval ()
-
27-10-2019 - |
Вопрос
Я использую веб -приложение App Engine. Этот обработчик запроса выводит форму с текстовым полем. При представлении он получит текст и добавит <h1>
теги для строк, которые начинаются с #
. Анкет я использовал repr()
иметь возможность разделить текст на список строк и eval()
проанализировать текст из каждой строки без u'
в начале строки, которая происходит от repr()
.
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()
дает мне эту ошибку. Как я могу обойти эту проблему?
Решение
Чтобы разделить текст, струны имеют встроенный 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 ...