Ho usato la seguente importazione:Perché da __future__ import * si genera un errore?
from __future__ import *
ma ottenuto questo errore:
SyntaxError: future feature * is not defined (<pyshell#0>, line 1)
Che cosa significa questo errore?
Ho usato la seguente importazione:Perché da __future__ import * si genera un errore?
from __future__ import *
ma ottenuto questo errore:
SyntaxError: future feature * is not defined (<pyshell#0>, line 1)
Che cosa significa questo errore?
Mentre importare *
dal modulo futuro è probabilmente pericoloso e dovrebbe essere evitato per i motivi menzionati da John Zwinck, è stato interessante scoprire perché questo non funziona. Funziona in modo diverso rispetto alla consueta sintassi di importazione Python che ti permette di catturare tutto dal modulo usando *
.
È possibile vedere cosa succede aprendo Lib/compiler/future.py
nella vostra directory di installazione di Python: tutte le dichiarazioni di importazione che importano da __future__
sono gestiti attraverso un parser speciale che consente solo di cercare di importare una delle caratteristiche predefinite. Dal codice sorgente di FutureParser
:
features = ("nested_scopes", "generators", "division",
"absolute_import", "with_statement", "print_function",
"unicode_literals")
Quindi, fondamentalmente, hai fatto bene a notare che l'importazione da __future__
è un caso particolare che funziona un po 'diverso dal solito processo di importazione Python, ma ci sono buone ragioni per questo.
Importare "tutto" dal futuro non è né desiderabile né ragionevole. In effetti, la maggior parte delle volte non dovresti importare *
, ma nel caso di __future__
è particolarmente insidioso: quali caratteristiche hai intenzione di ottenere? Sarebbe molto difficile scrivere un programma corretto che funzioni con le versioni future di Python le cui funzionalità non sono ancora note.
Certo, è ovviamente una cattiva idea, ma questa risposta non spiega perché questo errore accade ... – senshin