Python en Appengine: Error con eval ()
-
27-10-2019 - |
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?
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 ...