在函数的代码对象上使用 Python exec 时如何获取返回值?

2022-01-19 00:00:00 python function return exec

问题描述

出于测试目的,我想直接执行在另一个函数内部定义的函数.

For testing purposes I want to directly execute a function defined inside of another function.

我可以通过父函数的代码(func_code)得到子函数的代码对象,但是当我执行它时,我没有得到返回值.

I can get to the code object of the child function, through the code (func_code) of the parent function, but when I exec it, i get no return value.

有没有办法从执行的代码中获取返回值?

Is there a way to get the return value from the exec'ed code?


解决方案

是的,你需要在 exec 语句中进行赋值:

Yes, you need to have the assignment within the exec statement:

>>> def foo():
...     return 5
...
>>> exec("a = foo()")
>>> a
5

这可能与您的情况无关,因为它被用于受控测试,但使用带有用户定义输入的 exec 时要小心.

This probably isn't relevant for your case since its being used in controlled testing, but be careful with using exec with user defined input.

相关文章