2016-08-25 4 views
0

나는 파일의 상단에 #coding=utf-8 같은 마법의 코멘트를 사용하려고하면 유니 코드 문자열 인코딩 선언, 여기 무슨 일이야 : 잘못된구문 에러 :

Traceback (most recent call last): 
    File <string>, line 0 
SyntaxError: encoding declaration in Unicode string 

정말하지 않은 것도. 코드는 다음과 같습니다.

#coding=utf-8 

string = raw_input() 
chars = {} 
for i in string: 
    if i in chars: 
     chars[i] += 1 
    else: 
     chars[i] = 0 
print chars 

repl.it을 사용합니다.

+0

'코딩'이 아니라 '코딩'입니다. – DeepSpace

+0

@DeepSpace [여기] (https://www.python.org/dev/peps/pep-0263)를 참조하십시오. 물론'coding '할 수 있습니다! –

+1

@DeepSpace : 아니요. 그것은'디코딩','플루 브 코딩'또는'코딩'일 수 있습니다. 사용 된 정규식은 상관하지 않습니다. [코딩 = utf8과 '- \ * 코딩 : utf-8 - \ * -'의 차이점은 무엇입니까?] (https://stackoverflow.com/a/20302074) –

답변

7

질문에서 뭔가를 생략했습니다. exec을 사용하여이 코드를 실행하고 있습니다. 당신은 exec에 전달 유니 코드 텍스트에 PEP 263 선언을 사용할 수 없습니다

>>> code = '''\ 
... # coding=utf8 
... print 'hello world!' 
... ''' 
>>> exec code 
hello world! 
>>> exec code.decode('utf8') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 0 
SyntaxError: encoding declaration in Unicode string 

: 그리고 당신은 이미 소스가 유니 코드 텍스트라고 언급 한 의미 간부하기 유니 코드 개체를 통과했다.

repl.it과 같은 '사용자 지정'환경을 사용하는 경우 해당 환경은 항상 exec과 같은 트릭을 사용하여 코드를 실행하고 브라우저에서 소스 코드를 유니 코드로로드합니다. actual code used을 참조하십시오.이 문자열은 JSON 소스 문자열을 exec (이 문자열은 항상 unicode 문자열)로 전달합니다.

+0

나는 인터프리터가'exec'을 사용한다고 생각한다. 미리 감사드립니다! +1 –

+0

@ JSON에서로드 된 유니 코드 문자열에서; 실제 스크립트는'sys.argv [0]'을 읽을 때 쉽게 사용할 수 있습니다. –

+0

[sys.argv [0]'에 대해 알고 있습니다. (/ q/39142304/39142445 # comment65629227_39142304) –