2010-04-24 28 views
22

Estaba experimentando con '\' caracteres, usando '\ a \ b \ c ...' solo para enumerar por mí mismo los caracteres que Python interpreta como caracteres de control, y a qué. Esto es lo que encontré:¿Por qué ' x' no es válido en Python?

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

La mayor parte de los otros personajes que he intentado, '\ g', '\ s', etc. simplemente evaluado a una 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 guión llega a esta línea de código fuente:

val = "\x" 

me sale:

ValueError: invalid \x escape 

Lo que tiene de especial '\ x'? ¿Por qué se trata de manera diferente a los otros personajes no escapados?

Respuesta

20

Hay una tabla que enumera todos los códigos de escape y sus significados en el documentation.

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

Notas:

4. A diferencia de C estándar, se requiere exactamente dos dígitos hexadecimales.
5. En un literal de cadena, los escapes hexadecimales y octales indican el byte con el valor dado; no es necesario que el byte codifique un carácter en el juego de caracteres de origen. En un literal Unicode, estas escapes denotan un carácter Unicode con el valor dado.

+0

Ooof! ¡Por supuesto, gracias! – PaulMcG

4

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

5

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

'\x61' 

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

1

Usted no está dando la secuencia de escape completo:

\ xhh ...

los hh valor hexadecimal, cuando planees re hh significa una secuencia de dígitos hexadecimales ('0' - '9', y 'A' - 'F' o 'a' - 'f'). Como el mismo constructo en ISO C, la secuencia de escape continúa hasta que se vea el primer dígito no hexadecimal . (c.e.) Sin embargo, el uso de más de dos dígitos hexadecimales produce resultados indefinidos. (La ‘\ x’ escapar secuencia no está permitido en awk de POSIX.)

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

Cuestiones relacionadas