gpt4 book ai didi

python - __future__ 模块在 exec 中不生效

转载 作者:行者123 更新时间:2023-12-01 02:01:00 25 4
gpt4 key购买 nike

我想在 exec 函数中使用 future 模块。但看起来只在当前的 exec 函数中生效,而不会在后面的 exec 调用中生效。以下代码显示了问题。第二个 future 模块生效,您可以看到输出 hello world 正是我所期望的。这里有什么我想念的吗?谢谢

>>> ns = {}
>>> exec("from __future__ import print_function", ns)
>>> exec("print('hello', 'world')", ns)
('hello', 'world')
>>> exec("from __future__ import print_function\nprint('hello', 'world')", ns)
hello world

最佳答案

from __future__ 导入实际上是编译器开关,并且仅适用于正在编译的单个单元。您有两个单独的 exec() 调用,future 语句不会传递。编译标志不存储在您执行代码的全局或本地命名空间中。

所以,是的,您需要在每次调用 exec() 时添加该行。

您还可以使用compile() function首先生成一个代码对象,然后将其传递给 exec() ; compile() 允许您设置标志,而不必将开关拼写为 from __future__ import 行:

import __future__

flags = __future__.print_function.compiler_flag
exec(compile("print('hello', 'world')", '', 'exec', flags=flags))

关于python - __future__ 模块在 exec 中不生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49625774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com