/ / Prečo z importu __future__ * vyvolať chybu? - python, python-internals

Prečo z importu __future__ * vyvolať chybu? - python, python-internals

Použil som nasledujúci import:

from __future__ import *

ale dostal som túto chybu:

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

Čo znamená táto chyba?

odpovede:

9 pre odpoveď č. 1

Pri importovaní * z budúceho modulu je pravdepodobne nebezpečný aby sa malo vyhnúť z dôvodov, ktoré zmienil John Zwinck, bolo zaujímavé zistiť, prečo to nefunguje. Pracuje to inak ako bežná syntax importu jazyka Python, ktorá vám umožní získať všetko od modulu pomocou *.

Môžete vidieť, čo sa deje otvorením Lib/compiler/future.py vo vašom adresári inštalácie Pythonu: všetky dovozné vyhlásenia, ktoré importujú __future__ sú spustené pomocou špeciálneho analyzátora, ktorý vám umožní len vyskúšať a importovať jednu z preddefinovaných funkcií. Zo zdrojového kódu FutureParser:

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

Takže v podstate ste správne všimli, že dovoz z __future__ je špeciálny prípad, ktorý funguje trochu inak ako bežný proces importu programu Python, ale existujú dobré dôvody na to.


7 pre odpoveď č. 2

Dovoz "všetkého" z budúcnosti nie je ani žiaduci, ani rozumný. V skutočnosti by ste nemali dovážať väčšinu času * vôbec, ale v prípade __future__ je to zvlášť zákerné: aké funkcie máte v úmysle získať? Bolo by veľmi ťažké napísať správny program, ktorý bude pracovať s budúcimi verziami Pythonu, ktorých vlastnosti ešte nie sú známe.