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?

È stato utile?

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 ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top