为什么__future__ import*引发错误?

lxj*_*jhk 8 python python-internals

我使用了以下导入:

from __future__ import *
Run Code Online (Sandbox Code Playgroud)

但得到了这个错误:

SyntaxError: future feature * is not defined (<pyshell#0>, line 1)
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思?

Mar*_*ius 9

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

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

features = ("nested_scopes", "generators", "division",
            "absolute_import", "with_statement", "print_function",
            "unicode_literals")
Run Code Online (Sandbox Code Playgroud)

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


Joh*_*nck 7

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