web-dev-qa-db-fra.com

"depuis __future__ les importations doivent avoir lieu au début du fichier": qu'est-ce qui définit le début du fichier?

Le script Python

'''
a
'''

from __future__ import print_function

fonctionne bien (c.-à-d., ne fait rien), mais

'''
a
'''

'''
b
'''
from __future__ import print_function

provoque:

File "C:\test.py", line 8
    from __future__ import print_function
SyntaxError: from __future__ imports must occur at the beginning of the file

Pourquoi?


https://docs.python.org/2/reference/simple_stmts.html#future dit que:

Une future déclaration doit apparaître en haut du module. Les seules lignes qui peuvent apparaître avant une future déclaration sont:

  • le module docstring (le cas échéant),
  • commentaires ,
  • lignes vierges , et
  • d'autres déclarations futures.

Le deuxième exemple contient uniquement des commentaires et des lignes vides avant le from __future__ import print_function, et pourtant ça ne marche pas.

J'utilise Python 2.7.

9
Franck Dernoncourt

... qui semble être en contradiction avec le deuxième exemple que j'ai donné.

Non, car ce ne sont pas des commentaires, ce sont des chaînes.

La première chaîne est éluée du code en tant que docstring, mais la deuxième chaîne devient une instruction dans le code composé de la chaîne elle-même. __future__ importe doit être avant toutes les lignes pertinentes pour le code, même celles qui n'ont aucun effet.

16