SyntaxError: Не-ASCII символ '\ xa3' в файле, когда функция возвращает '£'

Скажи, у меня есть функция:

def NewFunction():
    return '£'

Я хочу напечатать кое-что со знаком фунта перед ним, и при попытке запустить эту программу выводится сообщение об ошибке, отображается следующее сообщение об ошибке:

SyntaxError: Non-ASCII character '\xa3' in file 'blah' but no encoding declared;
see http://www.python.org/peps/pep-0263.html for details

Может кто-нибудь сообщить мне, как я могу включить знак фунта в мою функцию возврата? Я в основном использую его в классе, и это в пределах'__str__' часть, что знак фунта включен.

 Ashwini Chaudhary14 мая 2012 г., 21:16
Python версия?
 Joe Mornin19 мар. 2015 г., 01:33
@ EasternMonk ссылка все еще работает для меня.
 murgatroid9914 мая 2012 г., 21:15
Ты вообще читал PEP, с которым связался? Он описывает, в чем проблема и как ее исправить.
 Mark Allen09 окт. 2017 г., 20:53
@ murgatroid99 Вот что вы, и в то время, когда я печатаю это, 27 других не хватает: Да, конечно, я прочитаю PEP. Уровень сложности: я получил это, пытаясь запустить / bin / sh в док-контейнере. Я не открыто пытаюсь запустить Python. Таким образом, все, что PEP собирается сказать мне, это как исправить код Python, который я не пытаюсь запустить и не писал. Я надеялся получить больше контекста от StackOverflow, вместо этого получил самодовольство. :( Дальнейшие поиски подвергли действительный ответ: / Stackoverflow.com вопросы / 38992850 / ... - заметьте, как PEP сделал ровно ноль, чтобы помочь.
 Karl Knechtel14 мая 2012 г., 22:23
"Может кто-нибудь сообщить мне, как я могу включить знак фунта в мою функцию возврата?" Ну, сообщение об ошибке гласит "см. Python.org / Peps / PEP-0263.html для деталей "; возможно, вам стоит начать там?

Ответы на вопрос(4)

Сначала добавь# -*- coding: utf-8 -*- строка в начало файла, а затем используйтеu'foo' для всех ваших данных в кодировке Unicode, отличных от ASCII:

def NewFunction():
    return u'£'

или используйте магию, доступную с Python 2.6, чтобы сделать ее автоматической:

from __future__ import unicode_literals
 R Claven08 февр. 2015 г., 04:27
СПАСИБО за то, что сэкономили мне столько времени!
 Daniel Lee13 июн. 2013 г., 21:28
Если у вас есть# -*- coding: utf-8 -*- вам не нужно добавлять префиксы в строку Unicode кu
 Sabuncu02 янв. 2014 г., 23:29
+ 1 СПАСИБО! ты был ответом на мою проблему.
 Skizo-ozᴉʞS03 мар. 2017 г., 16:36
@ А что, если это переменная? пример чтения файла? Я не могу использовать uVariable, как мне это сделать?
 Przemek D23 нояб. 2017 г., 10:32
@ DanielLee За исключением того, что это не так.# -*- coding: utf-8 -*- с последующимprint 'błąd' будет выводить мусор, аprint u'błąd' работает

что именно не так. Интерпретатору Python необходимо знать кодировку не-ASCII символа.

Если хочешь вернуться U + 00A3 тогда ты можешь сказать

return u'\u00a3'

, который представляет этот символ в чистом ASCII посредством escape-последовательности Юникода. Если вы хотите вернуть байтовую строку, содержащую буквенный байт 0xA3, это

return b'\xa3'

(где в Python 2 theb неявно; но явное лучше, чем неявное).

Связанный PEP в сообщении об ошибке сообщает вамв точк как сказать Python "этот файл не является чистым ASCII; вот кодировка, которую я использую". Если кодировка UTF-8, это будет

# coding=utf-8

или Emacs-совместимый

# -*- encoding: utf-8 -*-

Если вы не знаете, какую кодировку использует ваш редактор для сохранения этого файла, проверьте его с помощью чего-то вроде шестнадцатеричного редактора и некоторого поиска в Google. Переполнение стекакодировка символо тег имеет информационная страница тега с дополнительной информацией и советами по устранению неполадок.

Во многих словах, за пределами 7-битного диапазона ASCII (0x00-0x7F), Python не может и не должен угадывать, какую строку представляет последовательность байтов.https: //tripleee.github.io/8bit#a показывает 21 возможную интерпретацию для байта 0xA3, и это только из устаревших 8-битных кодировок; но это также может быть первый байт многобайтовой кодировки. Но на самом деле, я предполагаю, что вы на самом деле используете Latin-1, поэтому вы должны иметь

# coding: latin-1

как первая или вторая строка вашего исходного файла. В любом случае, без знания того, какой символ должен представлять байт, человек также не сможет догадаться об этом.

 tripleee29 июн. 2018 г., 05:51
Python 3 по умолчанию использует UTF-8 для исходных файлов, и вам, вероятно, все равно придется использовать UTF-8 для всего в наши дни. Utf8everywhere.org
 tripleee13 июн. 2018 г., 09:44
Это адаптация моего более раннего ответа на двойной вопрос: Stackoverflow.com / а / 50829958/874188

что верхняя часть моего сценария .py сработала для меня (необходима первая строка):

#!/usr/bin/env python
# -*- coding: utf-8 -*- 
 AGamePlayer25 янв. 2017 г., 09:30
для чего первая строка? просто интересуюсь..
 J D16 мар. 2017 г., 02:59
Это решает большую часть указанной проблемы, особенно ту, которую вы видели в онлайн-среде IDE, например, c9
 hailong22 июн. 2016 г., 16:29
У меня та же проблема, и мой Python - 2.7.11. После добавления второй строки# -*- coding: utf-8 -*- к началу файла, это решило проблему.
 cmd15 дек. 2017 г., 21:21
ервая строка - сделать исполняемый файл py на * nix. На самом деле это не связано с этим вопросом.
 anon5819293222 мая 2015 г., 21:34
Спасибо за это. Это супер странно, потому что мне никогда не приходилось делать это раньше. Я чувствую, что что-то не так с настройками кодирования моего Mac. У меня не было этой проблемы в эфире, но у моего нового профессионала есть эта проблема.

что PEP выдает ошибка. Проблема в том, что ваш код пытается использовать кодировку ASCII, но символ фунта не является символом ASCII. Попробуйте использовать кодировку UTF-8. Вы можете начать, поставив# -*- coding: utf-8 -*- вверху вашего .py файла. Чтобы продвинуться дальше, вы также можете определять кодировки по строкам в вашем коде. Однако, если вы пытаетесь вставить литеральный знак в ваш код, вам потребуется кодировка, поддерживающая его для всего файла.

 Riot Goes Woof30 июл. 2013 г., 18:39
Спасибо. Забыл сделать это сам. Однако в моем случае лучше кодировать в utf-8 без спецификации.
 Jay Dharmendra Solanki04 авг. 2014 г., 13:01
Благодарность!!! После 2 часов поиска это наконец заставило это работать .. Большое спасибо

Ваш ответ на вопрос