appengine 上的 Python:eval() 出错

发布于 2024-10-24 05:38:51 字数 1344 浏览 4 评论 0原文

我正在使用 App Engine 的网络应用程序。该请求处理程序输出一个带有文本字段的表单。提交后,它将获取文本并将

标记添加到以 # 开头的行。我使用 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],则一切正常,除了它不适用于第一行。即使第一行以 # 开头,条件也会选择 else,因为第一个字符将为 u' 而不是 #。尝试使用 eval() 解决这个问题给了我这个错误。我该如何解决这个问题?

I'm using App Engine's webapp. This request handler outputs a form with a text field. On submission, it will get the text and add <h1> tags to lines that start with #. I used repr() to be able to split the text into a list of lines, and eval() to analyze the text from each line without the u' at the start of the string that comes from 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))

The way the code is now, its giving me this error:

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

If I use just line[0] instead of eval(line)[0], everything works fine except that it doesn't work for the first line. Even if the first line starts with #, the conditional will go for the else because the first characters will be u' and not #. Trying to work around that with eval() is giving me that error. How can I work around this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

漫雪独思 2024-10-31 05:38:51

要分割文本,字符串有一个内置的 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 ...

To split the text, the strings have a built in splitlines method:

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

Then to see if a particular line begins with a #, try this:

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

Put together:

for line in self.request.get('text').splitlines():
    if line.strip()[0] == '#':
        ... do whatever ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文