La secuencia de escape es una combinación de caracteres (generalmente con el prefijo de un carácter de escape), que tiene una interpretación de carácter no literal. De tal forma que, las secuencias de caracteres que se consideran como secuencia de escape tienen un significado diferente a los caracteres literales contenidos en las mismas. La mayoría de los lenguajes de programación utilizan una barra invertida \ como carácter de escape. Este carácter se utiliza como iniciador de una secuencia de escape; cualquier carácter (uno o más) que le siga se interpreta como una secuencia de escape. Si una secuencia de escape se designa como un carácter no imprimible o un código de control, la secuencia se denomina carácter de control.
Lista de secuencias de escape en Python:
Personaje de escape | Sentido |
---|---|
\’ | Una frase |
\” | Comillas dobles |
\\ | barra invertida |
\norte | Nueva línea |
\r | Retorno de carro |
\t | Pestaña horizontal |
\b | Retroceso |
\F | alimentación de formulario |
\v | pestaña vertical |
\0 | carácter nulo |
\N{nombre} | Base de datos de caracteres Unicode denominada búsqueda |
\uxxxxxxxxx | Carácter Unicode con valor hexadecimal de 16 bits XXXX |
\Uxxxxxxxxx | Carácter Unicode con valor hexadecimal de 32 bits XXXXXXXX |
\ooo | Carácter con valor octal OOO |
\xhh | Carácter con valor hexadecimal HH |
La tabla anterior se aplica al lenguaje de programación Python, ya que los diferentes lenguajes tienen diferentes secuencias de control y caracteres de control, por lo que es posible que la tabla anterior no funcione en el lenguaje de programación que elija. Ex. El intérprete de línea de comandos de Windows usa un signo de intercalación ( ^ ) para escapar de los caracteres y, por lo tanto, la tabla anterior no se aplicará allí.
Interpretación de la secuencia de escape
La interpretación de la secuencia de escape se realiza cuando se encuentra una barra invertida dentro de una string. Después del encuentro de una barra invertida (dentro de una string), cualquier carácter siguiente (con ( \ )) se vería en la tabla antes mencionada. Si se encuentra una coincidencia, la secuencia se omite de la string y se usa su traducción asociada con la secuencia. Si no se encuentra una coincidencia, no se realiza la búsqueda y la secuencia de control se copia tal cual.
Ejemplo
Python3
# A string with a recognized escape sequence print("I will go\tHome") # A string with a unrecognized escape sequence print("See you\jtommorow")
Producción:
I will go Home See you\jtommorow
Como se ve en la salida anterior, la primera declaración de impresión produjo una salida donde \t se resolvió en una pestaña vertical y se omite en la salida. Por otro lado, en la segunda declaración de impresión, el \j persiste, ya que no existe una resolución legal para esa secuencia.
Prevención de la interpretación de la secuencia de escape
Hay casos en los que no queremos que las strings se comporten de esta manera. En esos casos, generalmente queremos conservar las barras invertidas. Algunas de las situaciones en las que esto puede ser necesario son:
- La string contiene una ruta de red o local
- La string contiene expresiones regulares, que luego serían procesadas por el motor de expresiones regulares
Métodos de Prevención
Método 1:
La duplicación constante de las barras invertidas también nos permite superar estos problemas. En este método, buscamos manualmente cada barra invertida en la string y le concatenamos otra barra invertida (en su posición inmediata). En general, es un método tedioso y solo se recomienda si el tamaño de la string es menor.
Python3
# sample string s = "I love to use \t instead of using 4 spaces" # normal output print(s) # doubling line backslashes s = "I love to use \\t instead of using 4 spaces" # output after doubling print(s)
Producción:
I love to use instead of using 4 spaces I love to use \t instead of using 4 spaces
Método 2:
Usando r’….’ o construcción R’…..’ . Comúnmente denominadas strings sin formato, que se utilizan para conservar las secuencias de escape como literales. De tal manera que hace lo que hacía el método anterior pero automáticamente (no requiere intervención humana). Para convertir una string normal en una string sin formato, prefije la string (antes de la comilla) con una r o R. Este es el método de elección para superar este problema de secuencia de escape.
Python3
s = "C:\Program Files\norton\appx" # normal output print(s) # changing the string into a raw string s = r"C:\Program Files\norton\appx" # Outputting the raw versio of the string print(s)
Producción:
C:\Program Files ortonppx C:\Program Files\norton\appx
Los problemas debidos a los caracteres de escape no siempre pueden generar resultados no deseados, sino también errores. Por ejemplo, el siguiente código al ejecutarse producirá un error.
Python3
print("C:\Users\Desktop\JSON")
Produce el siguiente error
print(“C:\Users\Desktop\JSON”)
^
SyntaxError: (error Unicode) El códec ‘unicodeescape’ no puede decodificar bytes en la posición 2-3: escape truncado \UXXXXXXXXX
El error se produce porque \U en la string hace que los siguientes 4 caracteres se traten como un valor hexadecimal de 32 bits que correspondería a un punto de código Unicode. Lo que lleva a un error ya que el siguiente carácter es s que está fuera del rango de base 16.