it-swarm.com.de

Ist '# - * - coding: utf-8 - * -' auch ein Kommentar in Python?

Wenn wir # Zum Einfügen von Kommentaren in Python verwenden, wie lautet dann Python):

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

anders?

50
Shravil Potdar

Ja, es ist auch ein Kommentar. Und der Inhalt dieses Kommentars hat eine besondere Bedeutung, wenn er sich in den ersten beiden Zeilen oben in der Datei befindet.

Aus der Dokumentation zu Encoding Declarations :

Wenn ein Kommentar in der ersten oder zweiten Zeile des Skripts Python) mit dem regulären Ausdruck coding[=:]\s*([-\w.]+) übereinstimmt, wird dieser Kommentar als Kodierungsdeklaration verarbeitet, die erste Gruppe dieses Ausdrucks heißt Codierung der Quellcodedatei Die Codierungsdeklaration muss in einer eigenen Zeile stehen.Wenn es sich um die zweite Zeile handelt, muss die erste Zeile auch eine reine Kommentarzeile sein.

Beachten Sie, dass es für Kommentare unerheblich ist, mit welchem ​​Codec die Datei gelesen werden soll. Python ignoriert normalerweise alles nach dem # Token und in allen akzeptierten Quellcode-Codecs der #, Kodierungsdeklaration und Zeilentrennzeichen werden genauso kodiert, wie sie alle Obermengen von ASCII sind. Der Parser muss also nur eine Zeile lesen, nach dem speziellen Text im Kommentar suchen, bei Bedarf eine weitere Zeile lesen, nach dem Kommentar suchen und dann den Parser so konfigurieren, dass er Daten gemäß dem angegebenen Codec liest.

Da der Kommentar entweder der erste oder der zweite in der Datei sein muss (und wenn es sich um die zweite Zeile handelt, muss die erste Zeile auch ein Kommentar sein), ist dies völlig sicher, da der konfigurierte Codec nur einen Unterschied bewirken kann Trotzdem keine Kommentarzeilen.

50
Martijn Pieters

Siehe Kodierungsdeklarationen im Python Referenzhandbuch:

Wenn ein Kommentar in der ersten oder zweiten Zeile des Python Skriptes übereinstimmt der reguläre Ausdruck coding[=:]\s*([-\w.]+), dieser Kommentar wird als Kodierungsdeklaration verarbeitet, die erste Gruppe dieses Ausdrucks benennt die Kodierung der Quelle Code-Datei.

(Betonung meiner)

Also ja, es ist ein Kommentar, ein besonderer. Das Besondere daran ist, dass der Parser versucht, darauf zu reagieren und es nicht zu ignorieren, wie dies bei Kommentaren der Fall ist, die sich nicht in der ersten oder zweiten Zeile befinden. Nehmen Sie zum Beispiel eine nicht registrierte Kodierungsdeklaration in einer Beispieldatei decl.py:

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

Wenn Sie dies versuchen und ausführen, wird Python es versuchen und verarbeiten, fehlschlagen und sich beschweren:

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