··File "
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 3:
ordinal not in range(128)
Декодер ASCII сгенерировал исключение, поскольку байтовое значение 0xc3 некорректно в ASCII. Существуют и другие восьмибитные кодировки, где значения между 128 (80 в шестнадцатеричной системе) и 255 (FF в шестнадцатеричной системе) корректны, но не совпадают со значениями UTF-8:
>>> place4 = place_bytes.decode('latin-1')
>>> place4
'café'
>>> place5 = place_bytes.decode('windows-1252')
>>> place5
'café'
Ох.
Мораль этой истории — используйте кодировку UTF-8 всюду, где это возможно. Она работает, она поддерживается везде, вы можете с ее помощью выразить любой символ Unicode и быстро закодировать и декодировать.
Если вы хотите узнать больше, вам могут помочь следующие ссылки:
• Unicode HOWTO (http://bit.ly/unicode-howto);
• Pragmatic Unicode (http://bit.ly/pragmatic-uni);
• The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) (http://bit.ly/jspolsky).
До этого момента мы просто игнорировали форматирование текста. В главе 2 были показаны несколько функций для выравнивания строк, а в примерах кода использовалась простая функция print() или даже вывод информации на экран поручался интерактивному интерпретатору. Но теперь мы рассмотрим, как
Python предлагает два способа форматирования строк, их часто называют
Старый стиль форматирования строк имеет форму
%s | Строка |
%d | Целое число в десятичной системе счисления |
%x | Целое число в шестнадцатеричной системе счисления |
%o | Целое число в восьмеричной системе счисления |
%f | Число с плавающей точкой в десятичной системе счисления |
%e | Число с плавающей точкой в шестнадцатеричной системе счисления |
%g | Число с плавающей точкой в восьмеричной системе счисления |
%% | Символ % |
Далее мы рассмотрим несколько примеров. Сначала целое число:
>>> '%s' % 42
'42'
>>> '%d' % 42
'42'
>>> '%x' % 42
'2a'
>>> '%o' % 42
'52'
Число с плавающей точкой:
>>> '%s' % 7.03
'7.03'
>>> '%f' % 7.03
'7.030000'
>>> '%e' % 7.03
'7.030000e+00'
>>> '%g' % 7.03
'7.03'
Целое число и символ %:
>>> '%d%%' % 100
'100 %'
Интерполяция некоторых строк и целых чисел:
>>> actor = 'Richard Gere'
>>> cat = 'Chester'
>>> weight = 28
>>> "My wife's favorite actor is %s" % actor
"My wife's favorite actor is Richard Gere"
>>> "Our cat %s weighs %s pounds" % (cat, weight)
'Our cat Chester weighs 28 pounds'
Последовательность %s внутри строки означает, что в нее нужно интерполировать строку. Количество использованных символов % должно совпадать с количеством объектов, которые располагаются после %. Один объект вроде actor располагается сразу после символа %. Если таких объектов несколько, они должны быть сгруппированы в кортеж (нужно окружить их скобками и разделить запятыми) вроде (cat, weight).
Несмотря на то что переменная weight целочисленная, последовательность %s внутри строки преобразует ее в строку.
Вы можете добавить другие значения между % и определением типа, чтобы указать минимальную и максимальную ширину, выравнивание и заполнение символами.
Определим несколько переменных: целочисленную n, число с плавающей точкой f и строку s:
>>> n = 42
>>> f = 7.03