2017-03-14 6 views
0

Von PEP263:Muss die Kodierungsdefinition in der ersten/zweiten Zeile in Python sein?

eine Quellcode-Codierung zu definieren, ein magischer Kommentar muss in der Datei, wie in die Quelldateien entweder als erste oder zweite Leitung gelegt werden:

# coding=<encoding name> 

oder (unter Verwendung von populären Editoren anerkannten Formate):

#!/usr/bin/python 
# -*- coding: <encoding name> -*- 

Was ist, wenn es Fälle gibt, in denen die Lizenzinformationen an den obersten Zeilen ankommen, z. von https://github.com/google/seq2seq/blob/master/seq2seq/training/utils.py:

# Copyright 2017 Google Inc. 
# 
# Licensed under the Apache License, Version 2.0 (the "License"); 
# you may not use this file except in compliance with the License. 
# You may obtain a copy of the License at 
# 
#  http://www.apache.org/licenses/LICENSE-2.0 
# 
# Unless required by applicable law or agreed to in writing, software 
# distributed under the License is distributed on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
# See the License for the specific language governing permissions and 
# limitations under the License. 

# -*- coding: utf-8 -*- 
"""Miscellaneous training utility functions. 
""" 

Wäre die Codierung Definition "magische Weise" noch von dem Python-Interpreter akzeptiert? Es wird großartig sein, wenn die Antwort erklärt, warum es in den ersten beiden Zeilen sein muss und der Zeiger auf den Interpreter-Code wäre großartig!

+3

Die Formulierung, die Du zitiert ist ganz klar, dass die Codierung in den ersten oder zweiten Linien sein muß. – BrenBarn

+0

Haben Sie es versucht? Was würden Sie tun, um herauszufinden, ob diese Kodierzeile genau das tut, was sie tun soll? –

+0

Wie könnten wir herausfinden, ob die Kodierzeile genau das tut, was sie tun soll? Fügen Sie einige 'utf8' Zeichen im Code hinzu? – alvas

Antwort

1

Ja, in Python 2, wo das Kodierungszeichen für UTF-8-Kodierungen benötigt wird, wenn es jenseits der zweiten Zeile liegt und alle Nicht-ASCII-Zeichen in der Datei enthalten sind, wird folgender Fehler ausgegeben:

File "encoded.py", line 5 
SyntaxError: Non-ASCII character '\xe1' in file encoded.py on line 5, but 
no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 

wenn die Datei nur ASCII-Zeichen enthält, wird es immer noch funktionieren, auch wenn die UTF-8-Codierung Markierung später als Linie 2. ASCII eine Teilmenge von UTF-8 ist, und im Grunde, die späten Codierung Richtlinie ignoriert werden. (Dies scheint der Fall für die spezifische utils.py, die Sie referenziert.)

Viele Parser und andere Dateiprozessoren erfordern solche magische Befehle am Anfang der Datei, weil sie gescannt und berücksichtigt werden müssen, um die Dateien richtig interpretieren. Setzen Sie sie später ein, und es wäre ineffizient, die gesamte Datei zu durchsuchen, um ein paar "magische" Sonderfälle zu finden.

Sie erhalten in Python 3 einen gewissen Spielraum, der eine UTF-8-Codierung voraussetzt. Wenn Ihre Datei jedoch anders kodiert ist, möchten Sie sie dennoch einschließen.

Verwandte Themen