2017-03-14 8 views
0

PEP263에서 :인코딩 정의가 파이썬의 첫 번째/두 번째 줄에 있어야합니까?

# coding=<encoding name> 
:

는 소스 코드 인코딩을 정의하려면, 마법의 코멘트는 하나 같은 파일의 첫 번째 또는 두 번째 줄, 같은 소스 파일에 배치해야

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

또는 (인기 편집자에 의해 인식되는 형식을 사용)

라이선스 정보가 맨 위에있는 경우 (예 : 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. 
""" 

인코딩 정의는 여전히 "마술"파이썬 인터프리터에 의해 허용 될 것인가? 대답이 왜 첫 번째 두 줄에 있어야하며 인터프리터 코드에 대한 포인터가 굉장 할지를 설명하면 좋을 것입니다!

+3

문구는 인코딩이 첫 번째 또는 두 번째 줄에 있어야 매우 분명하다

다음은 코딩 쿠키를 확인 (및 구문 분석) CPython과의 토크 나이에서 코드의 비트입니다. – BrenBarn

+0

시도해 보셨습니까? 이 인코딩 라인이 의도 한대로 작동하고 있는지 확인하려면 어떻게해야할까요? –

+0

인코딩 라인이 의도 한대로 작동하는지 어떻게 알 수 있습니까? 코드에 'utf8'문자를 추가 하시겠습니까? – alvas

답변

1

그렇습니다. 파이썬 2에서 UTF-8 인코딩에 코딩 마크가 필요한데, 두 번째 라인을 넘어서고 파일에 비 ASCII 문자가있는 경우

과 같은 오류가 발생합니다
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 

파일에 ASCII 문자 만 들어 있으면 UTF-8 코딩 기호가 2 줄보다 늦더라도 여전히 작동합니다. ASCII는 UTF-8의 하위 집합이며 기본적으로 후기 코딩 지시문은 무시 당하고있다. (참조 된 특정 utils.py의 경우 인 것 같습니다.)

많은 파서 및 기타 파일 처리기는 이러한 마법 명령을 스캔하여 고려해야하기 때문에 파일 시작 부분에 있어야합니다 파일을 올바르게 해석하십시오. 나중에 파일을 저장하면 비효율적 일 수 있습니다. 일부 "마법"특수한 경우를 찾기 위해 전체 파일을 검색해야합니다.

여러분은 UTF-8 인코딩을 가정 한 약간의 여유를 Python 3에서 얻을 수 있습니다. 파일이 다른 방법으로 인코딩 된 경우에도 파일을 포함 시키려합니다.