Python "SyntaxError: Non-ASCII символ' xe2 ' в файле"
Я пишу некоторый код python, и я получаю сообщение об ошибке, как в заголовке, от поиска это связано с набором символов.
вот строка, которая вызывает ошибку
hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")
Я не могу понять, какой символ не находится в наборе ANSI ASCII? Кроме того, поиск "xe2 " больше не дает информации о том, какой символ появляется. Какой символ в этой строке вызывает проблему?
Я также видел несколько исправлений для этого вопроса, но я не уверен, что использовать. Может ли кто-нибудь прояснить, в чем проблема (python не интерпретирует unicode, если не сказал об этом?), и как бы его правильно?
изменить:
Вот все строки рядом с той, что ошибки
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
18 ответов:
у вас есть блуждающий байт, плавающий вокруг. Вы можете найти его выполняющимся
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"
Если вы просто пытаетесь использовать символы UTF-8 или не заботитесь о том, находятся ли они в вашем коде, добавьте эту строку в верхнюю часть вашего
.pyfile# -*- coding: utf-8 -*-
изменить кодировку символов файла,
положите ниже строки в верхней части кода всегда
# -*- coding: utf-8 -*-
\xe2-это символ" -", он появляется в некоторых копиях и вставках, он использует другой равный вид" -", который вызывает ошибки кодирования. Заменить '-'(с копировать вставить) с правильным '-' (с вы кнопки клавиатуры).
У меня была такая же ошибка при копировании и вставке в комментарий из интернета
для меня это была одиночная кавычка (') в слове
Я просто стер его и перепечатал.
Я получил эту ошибку для символов в моих комментариях (от копирования/вставки контента из интернета в мой редактор для заметок).
чтобы разрешить в тексте Wrangler:
- выделение текста
- перейти в текстовое меню
- выберите "конвертировать в 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> :
примерно через полчаса просмотра Stack overflow, мне пришло в голову, что если использование одной кавычки "'" в комментарии будет через ошибку:
SyntaxError: Non-ASCII character '\xe2' in fileпосле просмотра трассировки я смог найти единственную цитату, используемую в моем комментарии.
У меня была эта точная проблема с запуском простого кода. py ниже:
import sys print 'version is:', sys.versionкод DSM выше предоставил следующее:
1 'принт \XE2 в\Х80\x98version является\XE2 в\Х80\X99, в представлении sys.версия'
Итак, проблема заключалась в том, что мой текстовый редактор использовал умные кавычки, как предложил Джон Y. После изменения параметров текстового редактора и повторного открытия/сохранения файла, он работает просто отлично.
Я пытаюсь разобрать этот странный Апостроф windows, и после попытки нескольких вещей здесь есть фрагмент кода, который работает.
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)
Если это кому-то поможет, для меня это произошло, потому что я пытался запустить реализацию Django в python 3.4 с моей командой python 2.7
у меня была та же проблема, но это потому, что я скопировал и вставил в строку, как это. Позже, когда я вручную набрал строку, как это ошибка исчезла.
у меня была ошибка из-за
-знак. Когда я заменил его на ввод вручную-ошибка была решена.скопировал строку
10 + 3 * 5/(16 − 4)вручную набранная строка
10 + 3 * 5/(16 - 4)вы можете ясно видеть, есть немного разница между тире.
Я думаю, что это из-за различного форматирования, используемого различными ОС или, может быть, просто другое программное обеспечение.
для меня проблема была вызвана из-за "’" этого символа в кавычках. Поскольку я скопировал код из 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, которые заставили тот же самый ключевой ход произвести изогнутую одинарную кавычку.
когда у меня похожая проблема при чтении текстовых файлов, которые я использую...
f = open('file','rt', errors='ignore')
У меня было это же решение проблемы просто. если вы скопировали что-то из интернета, если есть символы, такие как (",-,') просто замените их на клавиатуре. проблему решим.
Comments