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

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

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

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

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

val = "\x"

Я получил:

ValueError: invalid \x escape

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

5 ответов

Решение

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

Последовательность побега Значение Примечания
\xhh Символ с шестнадцатеричным значением hh    (4,5)

Заметки:

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

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

'\x61'

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

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

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

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

\ Xhh...

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

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

Другие вопросы по тегам