użyłem następujące import:Dlaczego z __future__ import * powstaje błąd?
from __future__ import *
ale mam ten błąd:
SyntaxError: future feature * is not defined (<pyshell#0>, line 1)
Co ten błąd oznacza?
użyłem następujące import:Dlaczego z __future__ import * powstaje błąd?
from __future__ import *
ale mam ten błąd:
SyntaxError: future feature * is not defined (<pyshell#0>, line 1)
Co ten błąd oznacza?
Podczas importowania *
z przyszłego modułu jest prawdopodobnie niebezpieczny i należy go unikać z powodów, o których wspomina John Zwinck, interesujące było dowiedzieć się, dlaczego to nie działa. Działa to inaczej niż zwykła składnia importu w języku Python, która pozwala pobrać wszystko z modułu przy użyciu *
.
Można zobaczyć, co dzieje się poprzez otwarcie Lib/compiler/future.py
w Pythonie katalogu instalacyjnego: wszystkie instrukcje importu, które importują z __future__
są prowadzone przez specjalny parser, który pozwala jedynie, aby spróbować i importować jedną z predefiniowanych funkcji. Z kodu źródłowego FutureParser
:
features = ("nested_scopes", "generators", "division",
"absolute_import", "with_statement", "print_function",
"unicode_literals")
Więc w zasadzie masz rację zauważyć, że import z __future__
jest szczególnym przypadkiem, który działa nieco odmiennie od zwykłego procesu importowania Pythona, ale istnieją dobre powody.
Importowanie "wszystkiego" z przyszłości nie jest ani pożądane, ani sensowne. W rzeczywistości przez większość czasu nie powinno się importować w ogóle numeru *
, ale w przypadku __future__
jest to szczególnie podstępne: jakie funkcje zamierzasz uzyskać? Byłoby bardzo trudno napisać poprawny program, który będzie działał z przyszłymi wersjami Pythona, których funkcje nie są jeszcze znane.
Oczywiście, jest to zły pomysł, ale ta odpowiedź nie wyjaśnia, dlaczego ten błąd występuje ... – senshin