私は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()
でそれを回避しようとすると、私はそのエラーを与えています。この問題を回避するにはどうすればよいですか?テキストを分割する
私がこの権利を読んだ場合、私たちから受け取った入力に 'eval()'を使っていますBフォーム?これは起こるのを待っているセキュリティ上の問題です。 'eval'は実際にPythonコードとして文字列を実行します。 – dappawit
ええ、今私はそれが悪い考えだったことを実感します。私はちょうど 'splitlines()'について知らなかったので、それが私が考えることができる唯一の方法でした。 –