Python "SyntaxError : 파일의 ASCII가 아닌 문자 '\ xe2'"


179

일부 파이썬 코드를 작성 중이며 제목에서와 같이 오류 메시지가 표시됩니다.이 문자 세트와 관련이 있습니다.

오류를 일으키는 줄은 다음과 같습니다.

hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")

ANSI ASCII 세트에없는 문자를 파악할 수 없습니까? 또한 "\ xe2"를 검색해도 어떤 문자가 나타나는지에 대한 정보가 더 이상 제공되지 않습니다. 그 줄의 어떤 문자가 문제를 일으키는가?

또한이 문제에 대한 몇 가지 수정 사항을 보았지만 사용할 것인지 확실하지 않습니다. 누군가 문제가 무엇인지 알 수 있습니까 (파이썬은 유니 코드를 해석하지 않으면 유니 코드를 해석하지 않습니까?), 어떻게 올바르게 정리합니까?

편집 : 여기에 오류가있는 모든 줄이 있습니다.

def createLoadBalancer():
    conn = ELBConnection(creds.awsAccessKey, creds.awsSecretKey)
    hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")
    lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])
    lb.configure_health_check(hc)
    return lb

63
파일 위에 # 코딩 : utf-8을 추가하십시오.
Mutant

2
게시 한 내용에는 문제가 없습니다. 근처 라인을보십시오.
kindall

편집 종류를 추가했습니다. 그 줄에 아무것도 보입니까?
KDecker

3
돌연변이의 제안을 시도 했습니까? 파일 어딘가에 "스마트 따옴표"(곡선 형 및 / 또는 각진 종류)가 있습니까?
John Y

2
EN DASH ( - \xe2\x80\x93)를 유발할 수있는 한 가지 예
Martin Thoma

답변:


145

부유 바이트가 떠 다니고 있습니다. 당신은 그것을 실행하여 찾을 수 있습니다

with open("x.py") as fp:
    for i, line in enumerate(fp):
        if "\xe2" in line:
            print i, repr(line)

"x.py"프로그램 이름으로 바꿔야 합니다. 줄 번호와 문제를 일으키는 줄이 나타납니다. 예를 들어, 해당 바이트를 임의로 삽입 한 후

4 "\xe2        lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])\n"

2
고마워 이것은 많은 도움이되었습니다! 아직도 차터가 무엇인지 확실하지 않습니다. 메모장에서 코드를 던지고 ASCII로 저장 한 다음 붙여 넣었습니다.
KDecker 2013

나는 또한 이것에 직면했다. 이것은 복사 붙여 넣기 문제 때문에 문자가 편집기에서 공백으로 표시되는 것으로 생각합니다 (vim).
Samveen

파이썬이 그러한 문자가 단순한 바이트가 아닌 이유 때문에 존재한다는 것을 알아야 할 수도 있습니다. Chris Redford의 답변에서 솔루션을 참조하십시오.
simplyharsh

7
문자 \ xe2는 하이픈 "-"(\ xe2 \ x80 \ x93)의 일부이지만 ASCII "-"보다 약간 길다. 텍스트를 vim에 붙여 넣었지만이 긴 하이픈에는주의를 기울이지 않았기 때문입니다. 전체 기사를 위해 위키 텍스트 (직물 사용)에서 이중 하이픈 "-"을 사용하여이 캐릭터를 제작했습니다.
PlasmaBinturong

1
내 사용자는 아포스트로피에 있었다O'Donnell
user2490003

278

UTF-8 문자를 사용하려고하거나 코드에 있는지 신경 쓰지 않으면이 줄을 .py파일 맨 위에 추가 하십시오

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

1
나를 위해 그것은 작동하지 않습니다. 아래에 항상 오류가 표시됩니다. 구문 오류 : 393 행의 /home/aslam/projects/deva_26nov/mylibrary/email_constants.py 파일의 비 ASCII 문자 '\ xe2'이지만 인코딩이 선언되지 않았습니다. 자세한 내용은 python.org/peps/pep-0263.html 을 참조하십시오
Aslam Khan

2
이것이 정답이 아닌 이유가 있습니까?
cph

@cph 질문을받은 지 4 개월이 지난 후에 썼습니다. :)
Chris Redford

@cph는 이것이 매우 유용하지만 선택한 답변은 "ANSI ASCII 세트에없는 문자는 무엇입니까?" 둘 다 좋은 답변이지만 첫 번째 경우는 일반적으로이 경우에 이깁니다.
Arthur Dent

39

또는 단순히 다음을 사용할 수 있습니다.

# coding: utf-8

.py 파일 맨 위에


27

\ xe2는 '-'문자이며 일부 사본에 나타나고 붙여 넣기에는 다르게 보이는 '-'를 사용하여 인코딩 오류가 발생합니다. '-'(사본 붙여 넣기에서)를 올바른 '-'(키보드 단추에서)로 바꾸십시오.


3
고마워! 제 경우에는 "" "캐릭터
였습니다

23

파일 문자 인코딩을 변경하십시오.

아래 코드를 항상 맨 위에 넣으십시오.

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

10

웹에서 의견을 복사하여 붙여 넣는 동안 동일한 오류가 발생했습니다.

나에게 그것은 단어에서 작은 따옴표 ( ')였습니다

방금 지워서 다시 입력했습니다.


같은 오류가 있었지만 로컬에서 테스트하는 동안 중단되지 않았습니다. 그러나 서버에서 실행될 때 해당 인코딩 오류가 발생했습니다. 주석 작은 따옴표를 utf-8 버전으로 대체해야했습니다.
shivgre

8

.py 파일의 첫 줄에 # coding = utf-8 줄을 추가 하면 문제가 해결됩니다.

아래 기사 링크에서 문제 및 수정 사항에 대한 자세한 내용을 읽으십시오.이 기사의 문제에 대한 해결책은 아름답게 설명되어 있습니다 : https://www.python.org/dev/peps/pep-0263/


4

메모에 문자에 대한이 오류가 발생했습니다 (메모 작성을 위해 웹의 내용을 편집기에서 복사 / 붙여 넣기에서).

텍스트 랭글러에서 해결하려면 :

  1. 텍스트를 강조
  2. 텍스트 메뉴로 이동
  3. "ASCII로 변환"을 선택하십시오

2
옵션은 TextWrangler의 이후 버전에서
text-

4

PEP 0263 기반 -파이썬 소스 코드 인코딩 정의

Python will default to ASCII as standard encoding if no other
encoding hints are given.

To define a source code encoding, a magic comment must
be placed into the source files either as first or second
line in the file, such as:

      # coding=<encoding name>

or (using formats recognized by popular editors)

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

or

      #!/usr/bin/python
      # vim: set fileencoding=<encoding name> :

그러나 첫 번째 의견부터 질문까지 효과가 있었으며 대답에는 설명이 포함되어 있습니다. 감사합니다
WebComer

3

나는 같은 문제가 있었고 이것을 내 파일 맨 위에 추가했습니다 (파이썬 3에서는 문제가 없었지만 파이썬 2에서 수행했습니다)

#!/usr/local/bin/python
# coding: latin-1

2

약 30 분 동안 스택 오버플로를 살펴본 후 주석에 작은 따옴표 "" "를 사용하면 오류가 발생합니다.

SyntaxError: Non-ASCII character '\xe2' in file

역 추적을보고 난 후에 내 의견에 사용 된 작은 따옴표를 찾을 수있었습니다.


2

그것이 누군가에게 도움이된다면, 파이썬 2.7 명령으로 파이썬 3.4에서 장고 구현을 실행하려고했기 때문에 이런 일이 발생했습니다.


장고를 사용하지 않았지만 여전히 도움이되었습니다. python 3을 사용하여 스크립트를 작성하고 python 2로 실행 해 보았습니다. 올바른 버전으로 스크립트를 실행하면 오류가 사라졌습니다. 감사!
JustBlossom

1

아래의 간단한 .py 코드를 실행하면이 정확한 문제가 발생했습니다.

import sys
print 'version is:', sys.version

위의 DSM 코드는 다음을 제공합니다.

1 '인쇄 \ xe2 \ x80 \ x98version is \ xe2 \ x80 \ x99, sys.version'

문제는 John Y가 제안한 것처럼 텍스트 편집기에서 SMART QUOTES를 사용했다는 것입니다. 텍스트 편집기 설정을 변경하고 파일을 다시 열거 나 저장 한 후에는 제대로 작동합니다.


1

이상한 창 배도를 파싱하려고하는데 여기 몇 가지를 시도한 후에 작동하는 코드 스 니펫이 있습니다.

def convert_freaking_apostrophe(self,string):

   try:
      issuer_rename = string.decode('windows-1252')
   except:
      issuer_rename = string.decode('latin-1')
   issuer_rename = issuer_rename.replace(u'’', u"'")
   issuer_rename = issuer_rename.encode('ascii','ignore')
   try:
      os.rename(directory+"/"+issuer,directory+"/"+issuer_rename)
      print "Successfully renamed "+issuer+" to "+issuer_rename
      return issuer_rename
   except:
      pass

#HANDLING FOR FUNKY APOSTRAPHE
if re.search(r"([\x90-\xff])", issuer):
   issuer = self.convert_freaking_apostrophe(issuer)

0

나는 같은 문제가 있었지만 문자열을 그대로 복사하여 붙여 넣었 기 때문입니다. 나중에 오류가 사라져서 수동으로 문자열을 입력했을 때.

-부호 때문에 오류가 발생했습니다 . 수동으로 입력하여 교체 -하면 오류가 해결되었습니다.

복사 한 문자열 10 + 3 * 5/(16 − 4)

수동으로 입력 한 문자열 10 + 3 * 5/(16 - 4)

하이픈 사이에 약간의 차이가 있음을 분명히 알 수 있습니다 .

다른 OS 또는 다른 소프트웨어에서 사용하는 형식이 다르기 때문이라고 생각합니다.


0

나를 위해 문제는 인용 부호에서 " '"기호로 인해 발생했습니다. pdf 파일에서 코드를 복사 했으므로 해당 오류가 발생했습니다. 방금 " '"를이 "'"(으)로 바꿨습니다.


0

어떤 문자가 발생했는지 확인하려면 문제가되는 변수를 문자열에 할당하고 iPython 콘솔에서 인쇄하십시오.

나의 경우에는

In [1]: array = [[24.9, 50.5]​, [11.2, 51.0]]        # Raises an error

In [2]: string = "[[24.9, 50.5]​, [11.2, 51.0]]"     # Manually paste the above array here

In [3]: string
Out [3]: '[[24.9, 50.5]\xe2\x80\x8b, [11.2, 51.0]]' # Here they are!

0

나를 위해, 문제는 코드를 Mac Notes에 입력 한 다음 Mac Notes에서 복사하여 vim 세션에 붙여 넣어 파일을 생성함으로써 발생했습니다. 이것은 내 작은 따옴표를 곡선 유형으로 만들었습니다. 그것을 고치기 위해 vim에서 파일을 열고 동일한 문자를 제거하고 다시 입력하여 곡선 작은 따옴표를 모두 직선으로 바꿨습니다. 동일한 키 스트로크로 곡선 작은 따옴표를 만드는 것은 Mac Notes였습니다.


0

오랫동안 문제가있는 것을 찾을 수 없었지만 나중에 웹에서 "UTC-12 : 00"행을 복사했으며 하이픈 / 대시가 문제를 일으킨다는 것을 깨달았습니다. 방금이 "-"를 다시 쓰고 문제가 해결되었습니다.

따라서 때로는 붙여 넣은 사본에도 오류가 발생합니다. 이 경우 붙여 넣은 코드를 다시 작성하면 작동합니다. 다시 쓰면 아무것도 변경되지 않은 것처럼 보이지만 오류는 사라집니다.


-1

텍스트 파일을 읽을 때 비슷한 문제가 발생하면 ...

f = open('file','rt', errors='ignore')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.