App Engine의 webapp를 사용하고 있습니다. 이 요청 핸들러는 텍스트 필드가있는 양식을 출력합니다. 제출시 텍스트를 가져와 #
으로 시작하는 줄에 <h1>
태그를 추가합니다. repr()
을 사용하여 텍스트를 줄 목록으로 나눌 수 있고 eval()
을 사용하여 repr()
에서 오는 문자열의 시작 부분에 u'
없이 각 줄의 텍스트를 분석했습니다.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))
코드가 지금 방법, 그 날이 오류주는 : 난 그냥 line[0]
대신 eval(line)[0]
으로 사용하는 경우
File "<string>", line 1
u'#somestring\r
^
SyntaxError: EOL while scanning string literal
을, 모든 것이 첫 번째 줄 작동하지 않는 것을 제외하고는 잘 작동 . 첫 번째 줄이 #
으로 시작한다고해도 조건부는 else
으로 처리됩니다. 첫 번째 문자는 u'
이고 #
이 아니기 때문입니다. eval()
으로 해결하려고하면 오류가 발생합니다. 이 문제를 해결하려면 어떻게해야합니까?
이 권리를 읽으면 우리가받은 입력에'eval()'을 사용하고 있습니다. B 형? 이것은 발생하기를 기다리는 보안 문제입니다. 'eval'은 실제로 문자열을 파이썬 코드로 실행합니다. – dappawit
그래, 나는 그것이 나쁜 생각이라는 것을 알고있다. 나는 단지'splitlines()'에 대해서 알지 못했고, 그래서 이것이 내가 생각할 수있는 유일한 방법이었다. –