Python sur AppEngine: erreur avec eval ()
-
27-10-2019 - |
Question
J'utilise la webapp App Engine. Ce gestionnaire de requêtes émet un formulaire avec un champ de texte. Sur demande, il obtiendra le texte et ajouter des balises <h1>
aux lignes qui commencent par #
. Je repr()
de pouvoir scinder le texte en une liste de lignes et eval()
pour analyser le texte de chaque ligne sans u'
au début de la chaîne qui vient 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 façon dont le code est maintenant, sa me donner cette erreur:
File "<string>", line 1
u'#somestring\r
^
SyntaxError: EOL while scanning string literal
Si je viens d'utiliser line[0]
au lieu de eval(line)[0]
, tout fonctionne bien, sauf que cela ne fonctionne pas pour la première ligne. Même si la première ligne commence par #
, le conditionnel ira pour le else
parce que les premiers caractères seront u'
et non #
. Essayer de travailler autour de cela avec eval()
me donne cette erreur. Comment puis-je contourner ce problème?
La solution
Pour diviser le texte, les chaînes ont intégré dans la méthode de splitlines
:
for line in self.request.get('text').splitlines():
... do whatever ...
Ensuite, pour voir si une ligne particulière commence par un #
, essayez ceci:
if line.strip()[0]=='#':
... do whatever ...
Assemblez:
for line in self.request.get('text').splitlines():
if line.strip()[0] == '#':
... do whatever ...