首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在函数中从exec返回值?

如何在函数中从exec返回值?
EN

Stack Overflow用户
提问于 2015-10-29 16:27:13
回答 1查看 9.7K关注 0票数 5

我试着:

代码语言:javascript
复制
def test(w,sli):
    s = "'{0}'{1}".format(w,sli)
    exec(s)
    return s

print test("TEST12344","[:2]")

其返回'TEST12344':2

如何在函数中从exec返回值

EN

回答 1

Stack Overflow用户

发布于 2018-09-17 14:32:52

考虑运行以下代码。

代码语言:javascript
复制
code = """
def func():
    print("std out")
    return "expr out"
func()
"""

在Python控制台上

如果您在python控制台上运行func(),输出将如下所示:

代码语言:javascript
复制
>>> def func():
...     print("std out")
...     return "expr out"
...
>>> func()
std out
'expr out'

使用exec

代码语言:javascript
复制
>>> exec(code)
std out
>>> print(exec(code))
std out
None

如您所见,返回为None。

使用eval

代码语言:javascript
复制
>>> eval(code)

将产生错误。

所以我做了我的exec_with_return()

代码语言:javascript
复制
import ast
import copy
def convertExpr2Expression(Expr):
        Expr.lineno = 0
        Expr.col_offset = 0
        result = ast.Expression(Expr.value, lineno=0, col_offset = 0)

        return result
def exec_with_return(code):
    code_ast = ast.parse(code)

    init_ast = copy.deepcopy(code_ast)
    init_ast.body = code_ast.body[:-1]

    last_ast = copy.deepcopy(code_ast)
    last_ast.body = code_ast.body[-1:]

    exec(compile(init_ast, "<ast>", "exec"), globals())
    if type(last_ast.body[0]) == ast.Expr:
        return eval(compile(convertExpr2Expression(last_ast.body[0]), "<ast>", "eval"),globals())
    else:
        exec(compile(last_ast, "<ast>", "exec"),globals())

exec_with_return(code)
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33409207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档