2011-03-19 4 views
1

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()으로 해결하려고하면 오류가 발생합니다. 이 문제를 해결하려면 어떻게해야합니까?

+0

이 권리를 읽으면 우리가받은 입력에'eval()'을 사용하고 있습니다. B 형? 이것은 발생하기를 기다리는 보안 문제입니다. 'eval'은 실제로 문자열을 파이썬 코드로 실행합니다. – 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