[英]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
语句的代码上下文中,也不能在函数定义之外使用return
和yield
语句。
所以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.