Pregunta

Estoy usando la aplicación web de App Engine. Este controlador de solicitud genera un formulario con un campo de texto. Al enviar, recibirá el texto y agregará <h1> Etiquetas a líneas que comienzan con #. solía repr() poder dividir el texto en una lista de líneas, y eval() para analizar el texto desde cada línea sin el u' Al comienzo de la cadena que proviene de 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))

La forma en que el código es ahora, me está dando este error:

File "<string>", line 1
    u'#somestring\r
                  ^
SyntaxError: EOL while scanning string literal

Si uso solo line[0] en vez de eval(line)[0], todo funciona bien, excepto que no funciona para la primera línea. Incluso si la primera línea comienza con #, el condicional irá por el else Porque los primeros personajes serán u' y no #. Tratando de trabajar con eso con eval() me está dando ese error. ¿Cómo puedo solucionar este problema?

¿Fue útil?

Solución

Para dividir el texto, las cuerdas tienen un incorporado splitlines método:

for line in self.request.get('text').splitlines():
    ... do whatever ...

Entonces para ver si una línea en particular comienza con un #, prueba esto:

if line.strip()[0]=='#':
    ... do whatever ...

Juntar:

for line in self.request.get('text').splitlines():
    if line.strip()[0] == '#':
        ... do whatever ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top