2014-12-17 12 views

Antwort

9

Während der Import * aus dem zukünftigen Modul wahrscheinlich gefährlich ist und aus den Gründen vermieden werden sollte, die John Zwinck erwähnt, war es interessant herauszufinden, warum das nicht funktioniert. Es funktioniert anders als die übliche Python-Import-Syntax, mit der Sie alles aus dem Modul mit * greifen können.

können Sie sehen, was von Lib/compiler/future.py Verzeichnis installiert in Ihrem Python eröffnen geschehen: alle Import-Anweisungen, die von __future__ importieren werden durch einen speziellen Parser ausführen, die Sie eines der vordefinierten Funktionen ausprobieren kann nur und importieren. Aus dem Quellcode FutureParser:

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

Also im Grunde waren Sie richtig, dass von __future__ ist ein Sonderfall importieren zu bemerken, dass ein bisschen anders als die üblichen Python Import funktioniert, aber es gibt gute Gründe dafür.

7

Importieren von "alles" aus der Zukunft ist weder wünschenswert noch sinnvoll. In der Tat sollten Sie die meiste Zeit nicht * überhaupt importieren, aber im Fall von __future__ ist es besonders heimtückisch: welche Funktionen haben Sie vor zu bekommen? Es wäre sehr schwierig, ein korrektes Programm zu schreiben, das mit zukünftigen Versionen von Python funktioniert, deren Eigenschaften noch nicht bekannt sind.

+0

Sicher, es ist offensichtlich eine schlechte Idee, aber diese Antwort erklärt nicht, warum dieser Fehler passiert ... – senshin

Verwandte Themen