Python on AppEngine: Errore con Eval ()
-
27-10-2019 - |
Domanda
Sto usando il WebApp di App Engine. Questo gestore di richiesta emette un modulo con un campo di testo. Al momento della presentazione, riceverà il testo e aggiungerà <h1>
tag alle linee che iniziano #
. ero solito repr()
essere in grado di dividere il testo in un elenco di righe e eval()
per analizzare il testo da ogni riga senza u'
All'inizio della stringa che proviene 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))
Il modo in cui è il codice ora, mi sta dando questo errore:
File "<string>", line 1
u'#somestring\r
^
SyntaxError: EOL while scanning string literal
Se uso solo line[0]
invece di eval(line)[0]
, tutto funziona bene tranne per il fatto che non funziona per la prima riga. Anche se la prima riga inizia con #
, il condizionale andrà per il else
Perché i primi personaggi saranno u'
e non #
. Cercando di aggirarlo con quello con eval()
mi sta dando quell'errore. Come posso aggirare questo problema?
Soluzione
To split the text, the strings have a built in splitlines
method:
for line in self.request.get('text').splitlines():
... do whatever ...
Then to see if a particular line begins with a #
, try this:
if line.strip()[0]=='#':
... do whatever ...
Put together:
for line in self.request.get('text').splitlines():
if line.strip()[0] == '#':
... do whatever ...