Python на appengine: ошибка с eval () - PullRequest
1 голос
/ 19 марта 2011

Я использую веб-приложение 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() дает мне эту ошибку. Как я могу обойти эту проблему?

1 Ответ

4 голосов
/ 19 марта 2011

Чтобы разделить текст, строки имеют встроенный метод 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 ...
...