2011-03-19 2 views
1

私はApp Engineのwebappを使用しています。このリクエストハンドラは、テキストフィールドを持つフォームを出力します。提出すると、テキストが取得され、#で始まる行に<h1>タグが追加されます。私は、repr()から来る文字列の先頭にu'を付けずに、各行のテキストを分析するために、eval()eval()を使用してテキストを行のリストに分割することができました。appengineのPython: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)) 

コードは、今あるそのは私にこのエラーを与える方法:

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

私はちょうどline[0]代わりeval(line)[0]のを使用する場合は、最初の行のために動作しないことを除いて、すべてが正常に動作します。最初の行が#で始まっても、最初の文字はu'であり、#ではないため、条件付きはelseになります。 eval()でそれを回避しようとすると、私はそのエラーを与えています。この問題を回避するにはどうすればよいですか?テキストを分割する

+0

私がこの権利を読んだ場合、私たちから受け取った入力に 'eval()'を使っていますBフォーム?これは起こるのを待っているセキュリティ上の問題です。 'eval'は実際にPythonコードとして文字列を実行します。 – dappawit

+0

ええ、今私はそれが悪い考えだったことを実感します。私はちょうど 'splitlines()'について知らなかったので、それが私が考えることができる唯一の方法でした。 –

答えて

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 ... 
+0

さて、それは速かった。ありがとう! –

+0

問題はありません、私が助けることができてうれしいです:) – dappawit

関連する問題