为什么__future__ import *引发错误?

时间:2014-12-17 04:44:15

标签: python python-internals

我使用了以下导入:

from __future__ import *

但得到了这个错误:

SyntaxError: future feature * is not defined (<pyshell#0>, line 1)

这个错误是什么意思?

2 个答案:

答案 0 :(得分:9)

虽然从未来的模块中导入*可能很危险,并且由于John Zwinck提到的原因应该避免,但有趣的是找出为什么这不起作用。它与通常的Python导入语法不同,它允许您使用*从模块中获取所有内容。

您可以通过在Python安装目录中打开Lib/compiler/future.py来查看正在发生的事情: 从__future__导入的所有import语句都通过一个特殊的解析器运行,该解析器只允许您尝试导入其中一个预定义的功能。来自FutureParser的源代码:

features = ("nested_scopes", "generators", "division",
            "absolute_import", "with_statement", "print_function",
            "unicode_literals")

基本上,你是正确的注意到从__future__导入是一个特殊情况,与通常的Python导入过程有点不同,但有很好的理由。

答案 1 :(得分:7)

导入&#34;一切&#34;从未来既不可取也不明智。事实上,大多数时候你根本不应该导入*,但在__future__的情况下,它特别阴险:你打算获得什么功能?编写一个正确的程序将非常困难,该程序将适用于其功能尚不清楚的未来Python版本。