J'utilise la webapp d'App Engine. Ce gestionnaire de requêtes génère un formulaire avec un champ de texte. Lors de la soumission, il recevra le texte et ajoutera les balises <h1>
aux lignes commençant par #
. J'ai utilisé repr()
pour pouvoir diviser le texte en une liste de lignes, et eval()
pour analyser le texte de chaque ligne sans le u'
au début de la chaîne qui vient de repr()
.Python sur appengine: erreur avec eval()
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
car les premiers caractères seront u'
et non #
. Essayer de contourner cela avec eval()
me donne cette erreur. Comment puis-je contourner ce problème?
Si je lis bien, vous utilisez 'eval()' sur l'entrée reçue d'un nous forme b? C'est un problème de sécurité qui attend de se produire. 'eval' exécute réellement la chaîne en tant que code Python. – dappawit
Oui, maintenant je réalise que c'était une mauvaise idée. Je ne connaissais tout simplement pas 'splitlines()', donc c'était la seule façon de le penser. –