81 votes

Est-ce que '# - * - coding: utf-8 - * -' est aussi un commentaire en Python?

Comme nous utilisons # pour l'insertion de commentaires en Python, comment Python prend-il:

 # -*- coding: utf-8 -*-
 

différemment?

69voto

Martijn Pieters Points 271458

Oui, c'est aussi un commentaire. Et le contenu de ce commentaire, suivez sens particulier s'il est situé en haut du fichier, dans les deux premières lignes.

À partir de l' Encodage des déclarations de la documentation:

Si un commentaire dans la première ou la deuxième ligne du script Python correspond à l'expression régulière coding[=:]\s*([-\w.]+), ce commentaire est traitée comme une déclaration de codage; le premier groupe de cette expression noms de l'encodage du fichier de code source. La déclaration de codage doit apparaître sur une ligne de sa propre. Si c'est la deuxième ligne, la première ligne doit également être un commentaire d'une seule ligne.

Notez qu'il n'importe pas quel codec doit être utilisé pour lire le fichier, autant que les commentaires sont concernés. Python serait normalement ignorer tout après l' # jeton, et dans tous accepté le code source des codecs l' #, la déclaration de codage et de séparateur de ligne de codage des caractères exactement les mêmes comme ils sont tous des grands ensembles de l'ASCII. Donc, tous à l'analyseur de a à faire est de lire une ligne, de numérisation pour le texte dans le commentaire, lire une autre si besoin, de numérisation pour le commentaire, puis configurer l'analyseur de lire les données en fonction de la codec.

Étant donné que le commentaire doit être soit le premier ou le deuxième dans le fichier (et si c'est la deuxième ligne, la première ligne doit être un commentaire trop), c'est tout à fait sûr, car la configuration du codec ne peut faire une différence et non des lignes de commentaires, de toute façon.

20voto

Jim Points 8793

Voir codage de déclarations dans le Python Manuel de Référence:

Si un commentaire dans la première ou la deuxième ligne du script Python correspond à l'expression régulière coding[=:]\s*([-\w.]+), ce commentaire est traitée comme une déclaration de codage; le premier groupe de cette expression noms de l'encodage du fichier de code source.

(L'emphase est mienne)

Donc oui, c'est un commentaire, une spéciale. Il est spécial dans l'analyseur va essayer et d'agir sur elle et de ne pas l'ignorer comme il le fait pour les commentaires ne sont pas dans la première ou la deuxième ligne. Prenez, par exemple, une non déclaration de codage dans un exemple de fichier decl.py:

# # -*- coding: unknown-encoding -*-
print("foo")

Si vous essayez de l'exécuter, Python va essayer de la traiter, d'échouer et de se plaindre:

python decl.py 
  File "decl.py", line 1
SyntaxError: encoding problem: unknown-encoding

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X