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?

Était-ce utile?

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 ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top