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导入过程略有不同,但这有很好的理由。当然,这显然是一个坏主意,但这个答案无法解释为什么会发生错误。。。