Prevención de la interpretación de la secuencia de escape en Python

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 que está fuera del rango de base 16. 

Publicación traducida automáticamente

Artículo escrito por VasuDev4 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *