我使用了以下导入:
from __future__ import *
但得到了这个错误:
SyntaxError: future feature * is not defined (<pyshell#0>, line 1)
这个错误是什么意思?
答案 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版本。