Почему '\ x' недопустим в Python? - PullRequest
24 голосов
/ 24 апреля 2010

Я экспериментировал с символами '\', используя '\ a \ b \ c ...', чтобы просто подсчитать, какие символы Python интерпретирует как управляющие символы и для чего. Вот что я нашел:

\a - BELL
\b - BACKSPACE
\f - FORMFEED
\n - LINEFEED
\r - RETURN
\t - TAB
\v - VERTICAL TAB

Большинство других символов, которые я пробовал, '\ g', '\ s' и т. Д., Просто соответствуют 2-символьной строке обратной косой черты и заданному символу. Я понимаю, что это намеренно и имеет смысл для меня.

Но '\ x' - это проблема. Когда мой сценарий достигает этой строки исходного текста:

val = "\x"

Я получаю:

ValueError: invalid \x escape

Что такого особенного в «\ х»? Почему он трактуется иначе, чем другие не экранированные символы?

Ответы [ 5 ]

20 голосов
/ 24 апреля 2010

В документации .

есть таблица всех кодов и их значений.
Escape Sequence    Meaning                        Notes
\xhh               Character with hex value hh    (4,5)

Примечания:

4. В отличие от стандартного C, требуется ровно две шестнадцатеричные цифры.
5. В строке буквенное, шестнадцатеричное и восьмеричное экранирование обозначают байт с заданным значением; необязательно, чтобы байт кодировал символ в исходном наборе символов. В литерале Unicode эти экранирования обозначают Символ Юникода с заданным значением.

6 голосов
/ 24 апреля 2010

\xhh используется для представления шестнадцатеричных escape-символов .

5 голосов
/ 24 апреля 2010

x используется для определения (одного байта) шестнадцатеричных литералов в строках, например:

'\x61'

будет иметь значение «a», потому что 61 - шестнадцатеричное значение 97, которое представляет собой в ASCII

4 голосов
/ 24 апреля 2010

\ x отсутствует шестнадцатеричный символ, с которым вы хотите сопоставить: \ xnn -> \ x1B

1 голос
/ 24 апреля 2010

Вы не даете полную последовательность выхода:

\ xhh ...

Шестнадцатеричное значение hh, где hh обозначает последовательность шестнадцатеричные цифры («0» - «9», а также «A» - «F» или «a» - «f»). Словно та же конструкция в ISO C, escape-последовательность продолжается до первого видна шестнадцатеричная цифра. (c.e.) Однако, используя более двух шестнадцатеричные цифры дают неопределенные результаты. (Escape \ x ’побег последовательность не допускается в POSIX awk.)

От: http://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...