Python über AppEngine: Fehler mit eval ()
-
27-10-2019 - |
Frage
Ich verwende die WebApp von App Engine. Dieser Anforderungshandler gibt ein Formular mit einem Textfeld aus. Bei der Einreichung wird der Text erhalten und hinzufügen <h1>
Tags zu Zeilen, die mit beginnen mit #
. ich benutzte repr()
um den Text in eine Liste von Zeilen aufteilen zu können, und eval()
Analyse des Textes aus jeder Zeile ohne die u'
Zu Beginn der Zeichenfolge, die von stammt 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))
Die Art und Weise, wie der Code jetzt ist, gibt mir diesen Fehler:
File "<string>", line 1
u'#somestring\r
^
SyntaxError: EOL while scanning string literal
Wenn ich nur benutze line[0]
Anstatt von eval(line)[0]
, Alles funktioniert gut, außer dass es für die erste Zeile nicht funktioniert. Auch wenn die erste Zeile mit beginnt mit #
, Die bedingte wird für die else
Weil die ersten Charaktere sein werden u'
und nicht #
. Versuch, das mit zu arbeiten eval()
Gibt mir diesen Fehler. Wie kann ich dieses Problem umgehen?
Lösung
Um den Text aufzuteilen, haben die Saiten ein eingebautes in splitlines
Methode:
for line in self.request.get('text').splitlines():
... do whatever ...
Dann um zu sehen, ob eine bestimmte Linie mit a beginnt #
, Versuche dies:
if line.strip()[0]=='#':
... do whatever ...
Zusammensetzen:
for line in self.request.get('text').splitlines():
if line.strip()[0] == '#':
... do whatever ...