繁体   English   中英

exec: SyntaxError: 'return' 外部函数

[英]exec: SyntaxError: 'return' outside function

我将代码片段存储在 Postgres 数据库中。 当我需要代码时,我会在数据库中找到它并使用exec()函数。 代码片段是extract函数的主体。

不幸的是它返回SyntaxError: 'return' outside function

方法

def extract(self,response):
    exec(self.custom_code)

代码片段(repr(code_snippet))

u"return response.xpath('/text()')"

我想它的行为应该是这样的:

def extract(self,response):
    return response.xpath('/text()')

我应该怎么做? 这只是一行代码片段,我需要执行多行代码片段。

编辑:

我将 Django 与 PostgreSQL 一起使用,我意识到它在行首删除了空格 - 缩进。 我不知道它是否与问题有关。

编辑2:

尝试 eval 而不是 exec。 现在它提出:

  File "/home/milano/PycharmProjects/Stilio_project/stilio/engine/models.py", line 107, in extract
    eval(self.custom_code)
  File "<string>", line 1
    return response.xpath('/text()')
         ^
SyntaxError: invalid syntax

根据exec文档

请注意,即使在传递给exec语句的代码上下文中,也不能在函数定义之外使用returnyield语句。

所以exec是明确禁止的。 并且该措辞是全球性的,并非特定于exec 在检查时,在'single'模式下使用代码compile -ed 的eval具有相同的错误; 你不能像这样动态插入return语句。

如果您绝对必须允许执行任意代码,我强烈建议将其限制为表达式,而不是语句,并隐式返回所述表达式的结果。 因此,不是存储u"return response.xpath('/text()')" ,而是存储u"response.xpath('/text()')" ,并且执行动态调用的代码将更改为:

def extract(self,response):
    return eval(self.custom_code)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM