Подтвердить что ты не робот

Почему '\ x' недействителен в Python?

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

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

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

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

val = "\x"

Я получаю:

ValueError: invalid \x escape

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

4b9b3361

Ответ 1

В таблице есть таблица, в которой перечислены все escape-коды и их значения.

Escape Sequence    Meaning                        Notes
\xhh               Character with hex value hh    (4,5)

Примечания:

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

Ответ 3

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

'\x61'

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

Ответ 4

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

Ответ 5

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

\ xhh...

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

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