chr в python 2 ведет себя странно - PullRequest
1 голос
/ 25 марта 2020

Просмотр документации chr в Python 2.7 :

Возвращает строку из одного символа, код ASCII которого является целым числом i.

source

, но ASCII находится в диапазоне 128. Но в Python 2.7 у меня есть:

> chr(181)
'\xb5

Это удивительно, я ожидал ошибка. Сейчас я просто приму это.

In Python 3.7 :

Возвращает строку, представляющую символ, кодовой точкой Unicode которого является целое число i.

источник

Так что в основном это unichr в Python 2.7.

В Python 3,7 :

> chr(181).encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode character '\xb5' in position 0: ordinal not in range(128)

Что ожидается, а затем:

> chr(181).encode('utf8')
b'\xc2\xb5'

Обратите внимание, что у нас есть \xb5 в общем.

Вопрос :

Почему Python 2.7 не прерывается на chr(181) и как получается, что он на самом деле выводит код, который кажется частично правильным ,

1 Ответ

1 голос
/ 25 марта 2020

Поскольку chr() принимает диапазон 0..255.

Из документации :
Возвращает строку из одного символа, код ASCII которого является целым числом я. Например, chr (97) возвращает строку «a». Это обратное значение ord (). Аргумент должен быть в диапазоне [0..255] включительно; ValueError будет повышен, если я вне этого диапазона. Смотрите также unichr ().

...