gpt4 book ai didi

python - 如何判断 Python 程序在运行时启用了哪些来自 '__future__' 的编译指示?

转载 作者:行者123 更新时间:2023-12-04 01:52:38 26 4
gpt4 key购买 nike

当我在 Python 2 中使用 from __future__ import X 启用解释器功能时语句(例如 from __future__ import unicode_literals ),解释器行为从那里改变。

有没有办法在运行时确定 __future__编译指示是否已在执行的给定点启用?

我想这样做的原因是我维护的一些遗留代码有条件地启用了一些 __future__ eval 之前的编译指示ing/runtime-importing 其他任意代码。在调试该代码中的行为问题时,我想检查是否是因为其中一些条件 __future__导入是否已触发。我知道有条件导入__future__ (或在入口点顶部以外的任何地方导入它)是一种反模式,并且没有传播它的计划;我只想调试执行此操作的代码。

我试过检查 sys.modules , 并使用它我可以告诉 __future__已导入,因为 __future__模块出现在已经导入的列表中。然而,这只是 __future__模块,并且解释器行为更改未作为子模块实现,因此我看不到哪些已启用或未启用。

最佳答案

你可以只看文件的顶部,因为 __future__进口是在那里定义的,它们不能在其他任何地方。

口译员也是全局不变正如你所暗示的。 __future__更改仅适用于具有实际 __future__ 的模块导入它们。所以如果你有两个 .py项目中的文件,其中只有一个具有 from __future__ import unicode_literals , 那么只有 那个文件将有 unicode 文字。另一个文件仍然有正常的文字。

以下测试已在 python 2.7 中执行:

文件1.py:

from __future__ import unicode_literals
x = 'This is unicode'

文件2.py
y = 'This is NOT unicode'

测试:
>>> import file1
>>> import file2
>>> file1.x, type(file1.x)
(u'This is unicode', <type 'unicode'>)
>>> file2.y, type(file2.y)
('This is NOT unicode', <type 'str'>)

这意味着特征被存储 每个模块 而不是全局性的。您可以检查模块对象的功能属性:
>>> file1.unicode_literals
_Feature((2, 6, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 131072)
>>> file2.unicode_literals
AttributeError: 'module' object has no attribute 'unicode_literals'

关于python - 如何判断 Python 程序在运行时启用了哪些来自 '__future__' 的编译指示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52261195/

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