Python "SyntaxError: 비ASC파일의 II 문자 '\xe2'
python 코드를 쓰고 있는데, 검색 결과 문자 집합과 관련된 에러 메시지가 제목과 같이 표시됩니다.
에러의 원인이 되는 행은 다음과 같습니다.
hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")
ANSI ASCII 세트에 없는 문자를 알 수 없습니다.게다가 「\xe2」를 검색해도, 그 문자가 어떤 문자로 표시되는지에 대한 정보는 표시되지 않습니다.이 행의 어느 문자가 문제의 원인입니까?
이 문제에 대한 수정도 몇 가지 보았지만 어떤 것을 사용해야 할지 잘 모르겠습니다.(피톤은 지시가 없는 한 유니코드를 해석하지 않는다) 어떤 문제인지, 그리고 어떻게 하면 제대로 해결할 수 있을까요?
EDIT: 에러가 발생한 행은 다음과 같습니다.
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
UTF-8 이 의 맨 합니다..py
# -*- coding: utf-8 -*-
떠돌아다니는 바이트가 있어실행해서 찾을 수 있습니다.
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"
또는 단순히 다음을 사용할 수 있습니다.
# coding: utf-8
.py 파일 맨 위에
\xe2는 '-' 문자입니다.복사앤페이스트에 따라서는 부호화 에러의 원인이 되는 다른 같은 모양의 '-'를 사용합니다.카피 페이스트의 「-」를 올바른 「-」(키보드 버튼의)로 바꿉니다.
파일 문자 인코딩을 변경합니다.
항상 코드 맨 위에 줄 바꿈
# -*- coding: utf-8 -*-
웹에서 댓글을 복사하여 붙여넣는 동안 동일한 오류가 발생했습니다.
저에겐 한 글자의 따옴표(')였습니다.
그냥 지우고 다시 입력했어요.
.py 파일의 첫 줄에 # coding=utf-8 행을 추가하면 문제가 해결됩니다.
다음 링크에서 문제 및 해결 방법에 대한 자세한 내용을 읽어보시기 바랍니다.이 문서의 문제에서는 해결 방법이 아름답게 설명되어 있습니다.https://www.python.org/dev/peps/pep-0263/
이 에러는, 코멘트내의 문자(메모 목적의 Web 컨텐츠의 카피/에디터에의 붙여넣기)에 대해서 발생했습니다.
텍스트 랭글러에서 해결하려면:
- 텍스트 강조 표시
- 텍스트 메뉴로 이동합니다.
- "ASCII로 변환"을 선택합니다.
PEP 0263 기반 - Python 소스 코드 인코딩 정의
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> :
같은 문제가 발생하여 파일 상단에 추가했을 뿐입니다(파이썬3에서는 문제가 없었지만 파이썬2에서는 문제가 있었습니다).
#!/usr/local/bin/python
# coding: latin-1
만약 도움이 된다면, python 2.7 명령어로 python 3.4에서 django 구현을 실행하려고 했기 때문에 일어난 일입니다.
케이스 \는 I 케이스 \xe2입니다.’
명령어는 ""로 .'
.
일반적으로 UTF-8을 ASCII로 변환할 것을 권장합니다(예:https://onlineasciitools.com/convert-utf8-to-ascii).
그러나 UTF-8을 유지하려면
#-*- mode: python -*-
# -*- coding: utf-8 -*-
스택 오버플로를 약 30분 동안 살펴본 결과, 코멘트에서 단일 따옴표 " " 를 사용하면 오류가 해결된다는 것을 알게 되었습니다.
SyntaxError: Non-ASCII character '\xe2' in file
트레이스 백을 보고 코멘트에 사용된 단일 인용문을 찾을 수 있었습니다.
아래의 간단한 .py 코드를 실행하면 다음과 같은 문제가 발생하였습니다.
import sys
print 'version is:', sys.version
위의 DSM 코드는 다음과 같습니다.
1 '인쇄 \xe2\x80\x98버전은 \xe2\x80\x99, sys.version'
문제는 존 Y가 제안한 대로 텍스트 에디터가 SMART 따옴표를 사용했다는 것입니다.텍스트 에디터 설정을 변경하고 파일을 다시 열거나 저장하면 정상적으로 작동합니다.
나는 그 이상한 윈도우 아포스트랩을 해석하려고 하고 있는데, 몇 가지 시도해보니 동작하는 코드 조각이 있다.
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)
저도 같은 문제가 있었는데 그대로 복사해서 붙여 넣었기 때문입니다.나중에 문자열을 수동으로 입력했을 때 오류가 사라졌습니다.
에러가 발생했습니다.-
수동 때. 수동으로 입력하는 것으로 대체했을 때-
오류가 해결되었습니다.
된 문자열 " " " "10 + 3 * 5/(16 − 4)
으로 한 문자열 " " " "10 + 3 * 5/(16 - 4)
두 하이픈 사이에 약간의 차이가 있음을 분명히 알 수 있습니다.
OS나 소프트웨어에 따라 사용하는 포맷이 다르기 때문이라고 생각합니다.
저는 따옴표 안에 있는 기호 " " 때문에 문제가 발생했습니다.pdf 파일에서 코드를 복사했기 때문에 오류가 발생했습니다.방금 ""를 이 ""로 대체했습니다.
이 원인이 되는 문자를 찾으려면 문자열에 문제가 있는 변수를 할당하고 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!
이 문제는 Mac Notes에 코드를 입력하고 Mac Notes에서 복사한 후 vim 세션에 붙여넣어 파일을 생성하는 것이 원인입니다.이 때문에 내 작은 인용문은 곡면체 활자가 되었습니다. 이를 수정하기 위해 vim에서 파일을 열고 같은 문자를 삭제하고 다시 입력하는 것만으로 모든 구부러진 작은 인용문을 스트레이트 타입으로 교체했습니다.동일한 키 스트로크를 사용하여 곡선의 단일 인용문을 만든 것은 Mac Notes입니다.
오랫동안 문제의 원인을 찾을 수 없었지만, 나중에 웹에서 "UTC-12:00" 행을 복사한 것이 문제의 원인이라는 것을 알게 되었습니다.다시 "-"라고 썼더니 문제가 해결되었습니다.
그래서 복사해서 붙여진 선들도 오류가 날 수 있습니다.이 경우 복사 붙여넣기 코드를 다시 작성하기만 하면 됩니다.다시 쓸 때는 아무것도 변경되지 않은 것처럼 보이지만 오류는 사라집니다.
여기에는 좋은 솔루션이 많이 있습니다.
이들 중 어느 쪽에서도 실제로 다루지 않는 과제는 특정 비ASC를 시각적으로 식별하는 것입니다.다른 일반 ASCII 문자와 유사한 II 문자.예를 들어, 텍스트 편집기의 글꼴에 따라 대시는 하이픈과 거의 똑같이 나타나고 곱슬곱슬한 따옴표는 스트레이트 따옴표처럼 보일 수 있습니다.
Mac 또는 Linux에서 작동해야 하는 이 원라이너는 ASCII 인쇄 가능 범위에 없는 문자를 삭제하고 다음과 같은 차이를 나란히 보여줍니다.
# assumes Bash shell; for Bourne shell (sh), rearrange as a pipe and
# give '-' as second argument to 'sdiff' instead
sdiff --suppress-common-lines script.py <(tr -cd '\11\12\15\40-\176' <script.py)
캐릭터\11
,\12
,그리고.\15
는 각각 탭, 줄바꿈 및 캐리지 리턴입니다.나머지 범위는 표시되는 ASCII 문자입니다.(모자 끝)
이 SO 스레드에서 수집된 또 다른 힌트에서는 ASCII 가시 범위에 포함되지 않는 모든 것으로 구성된 역문자 클래스를 사용하여 다음과 같이 강조 표시합니다.
grep --color '[^ -~]' script.py
macOS/BSD 버전의 grep에서도 정상적으로 동작합니다.
나는 이것을 압정으로 고쳤다.pycharm 하단에 파일 인코딩을 볼 수 있습니다.UT-8인 것을 알았습니다.US-ASCII로 변경했습니다.
사용하는 텍스트 파일을 읽을 때 비슷한 문제가 있을 때...
f = open('file','rt', errors='ignore')
언급URL : https://stackoverflow.com/questions/21639275/python-syntaxerror-non-ascii-character-xe2-in-file
'source' 카테고리의 다른 글
숫자를 어떻게 반올림합니까? (0) | 2022.11.13 |
---|---|
matplotlib 오류 - tkinter라는 이름의 모듈이 없습니다. (0) | 2022.11.13 |
페이지를 새로 고치지 않고 JavaScript를 사용하여 window.location(URL)에서 해시를 삭제하려면 어떻게 해야 합니까? (0) | 2022.11.05 |
HTML을 PHP "if" 스테이트먼트에 삽입할 수 있습니까? (0) | 2022.11.05 |
MySQL이 ALTER 탭에 행업하다Leep. (0) | 2022.11.05 |