Вопрос

Я использую веб -приложение 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 ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top