1

App Engine の webapp を使用しています。このリクエスト ハンドラーは、テキスト フィールドを含むフォームを出力します。送信すると、テキストが取得され、<h1>で始まる行にタグが追加されます#。以前repr()は、テキストを行のリストに分割し、eval()各行のテキストを分析することができましu'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))

コードの現在の方法では、次のエラーが表示されます。

File "<string>", line 1
    u'#somestring\r
                  ^
SyntaxError: EOL while scanning string literal

line[0]の代わりにだけを使用するeval(line)[0]と、最初の行で機能しないことを除いて、すべて正常に機能します。最初の行が で始まっていても、最初の文字はではなく#であるため、条件文は になります。それを回避しようとすると、そのエラーが発生します。この問題を回避するにはどうすればよいですか?elseu'#eval()

4

1 に答える 1

4

テキストを分割するために、文字列にはsplitlinesメソッドが組み込まれています。

for line in self.request.get('text').splitlines():
    ... do whatever ...

次に、特定の行が で始まるかどうかを確認するには、次のよう#にします。

if line.strip()[0]=='#':
    ... do whatever ...

まとめる:

for line in self.request.get('text').splitlines():
    if line.strip()[0] == '#':
        ... do whatever ...
于 2011-03-19T05:08:59.973 に答える