Python 为什么来自未来导入*会引发错误?

Python 为什么来自未来导入*会引发错误?,python,python-internals,Python,Python Internals,我使用了以下导入: from __future__ import * 但我犯了这个错误: SyntaxError:未定义未来功能*(,第1行) 这个错误意味着什么?从未来导入“一切”既不可取也不明智。事实上,大多数时候你根本不应该导入*,但是在\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?要编写一个正确的程序来处理功能未知的Python的未来版本是非常困难的。从未来

我使用了以下导入:

from __future__ import *
但我犯了这个错误:

SyntaxError:未定义未来功能*(,第1行)

这个错误意味着什么?

从未来导入“一切”既不可取也不明智。事实上,大多数时候你根本不应该导入
*
,但是在
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?要编写一个正确的程序来处理功能未知的Python的未来版本是非常困难的。

从未来模块导入
*
可能是危险的,应该避免,因为John Zwinck提到的原因,找出这不起作用的原因很有意思。它的工作方式与通常的Python导入语法不同,后者允许您使用
*
获取模块中的所有内容

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

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

因此,基本上,您正确地注意到从
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>导入是一种特殊情况,其工作方式与通常的Python导入过程略有不同,但这有很好的理由。

当然,这显然是一个坏主意,但这个答案无法解释为什么会发生错误。。。