¿Por qué ‘\ x’ no es válido en Python?

Estaba experimentando con ‘\’ caracteres, usando ‘\ a \ b \ c …’ solo para enumerar por mí mismo qué caracteres interpreta Python como caracteres de control, y para qué. Esto es lo que encontré:

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

La mayoría de los otros caracteres que probé, ‘\ g’, ‘\ s’, etc. simplemente evalúan la cadena de 2 caracteres de una barra invertida y el carácter dado. Entiendo que esto es intencional, y tiene sentido para mí.

Pero ‘\ x’ es un problema. Cuando mi script llega a esta línea de origen:

 val = "\x" 

Yo obtengo:

 ValueError: invalid \x escape 

¿Qué tiene de especial ‘\ x’? ¿Por qué se trata de manera diferente a los otros personajes no escapados?

Hay una tabla que enumera todos los códigos de escape y sus significados en la documentación .

 Secuencia de escape Significado Notas
 \ xhh Personaje con valor hexadecimal hh (4,5)

Notas:

4. A diferencia del Estándar C, se requieren exactamente dos dígitos hexadecimales.
5. En una cadena literal, los escapes hexadecimales y octales denotan el byte con el valor dado; no es necesario que el byte codifique un carácter en el conjunto de caracteres de origen. En un literal de Unicode, estos escapes denotan un carácter Unicode con el valor dado.

\xhh se utiliza para representar caracteres de escape hexadecimales .

x se utiliza para definir (un byte) literales hexadecimales en cadenas, por ejemplo:

 '\x61' 

evaluará a ‘a’, porque 61 es el valor hexadecimal de 97, que representa a en ASCII

\ x falta el carácter hexadecimal con el que desea hacer coincidir: \ xnn -> \ x1B

No estás dando la secuencia de escape completa:

\ xhh …

El valor hexadecimal hh, donde hh representa una secuencia de dígitos hexadecimales (‘0’ – ‘9’, y ‘A’ – ‘F’ o ‘a’ – ‘f’). Al igual que la misma construcción en ISO C, la secuencia de escape continúa hasta que se ve el primer dígito no hexadecimal. (ce) Sin embargo, el uso de más de dos dígitos hexadecimales produce resultados indefinidos. (La secuencia de escape ‘\ x’ no está permitida en POSIX awk.)

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