Сообщение об ошибке говорит вам, что именно не так. Интерпретатор Python должен знать кодировку не-ASCII символа.
Если вы хотите вернуть U + 00A3, то вы можете сказать,
return u'\u00a3'
который представляет этот символ в чистом ASCII посредством escape-последовательности Unicode. Если вы хотите вернуть байтовую строку, содержащую буквенный байт 0xA3, это
return b'\xa3'
(где в Python 2 b
неявный; но явный лучше, чем неявный).
Связанный PEP в сообщении об ошибке объясняет , как именно сказать Python: «Этот файл не является чистым ASCII; вот кодировка, которую я использую». Если кодировка UTF-8, это будет
# coding=utf-8
или Emacs-совместимый
# -*- encoding: utf-8 -*-
Если вы не знаете, какую кодировку использует ваш редактор для сохранения этого файла, изучите его с помощью чего-то вроде шестнадцатеричного редактора и некоторого поиска в Google. Переполнение стекакодировка символовВ теге есть страница с информацией о тегах, содержащая дополнительную информацию и советы по устранению неполадок.
Иными словами, за пределами 7-битного диапазона ASCII (0x00-0x7F) Python не может и не должен угадывать, какую строку представляет последовательность байтов. https://tripleee.github.io/8bit#a3 показывает 21 возможную интерпретацию для байта 0xA3, и это только из устаревших 8-битных кодировок; но это также может быть первый байт многобайтовой кодировки. Но на самом деле, я предполагаю, что вы на самом деле используете Latin-1, так что вы должны иметь
# coding: latin-1
как первая или вторая строка вашего исходного файла. В любом случае, без знания того, какой символ должен представлять байт, человек также не сможет догадаться об этом.
Предостережение: coding: latin-1
определенно удалит сообщение об ошибке (потому что нет никаких последовательностей байтов, которые технически не разрешены в этой кодировке), но может привести к совершенно неправильному результату, когда код интерпретируется, если фактическая кодировка является чем-то другим. Вы действительно должны знать кодировку файла с полной уверенностью, когда вы объявляете кодировку.