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.