Python – Literales de cuerdas crudas

No entiendo cómo funcionan los literales crudos de cuerdas. Sé que al usar r ignora todas las ofertas especiales, como al hacer \n lo trata como \ n y no como una nueva línea. pero luego traté de hacer esto:

 x = r'\' 

y dijo SyntaxError: EOL while scanning string literal y no ‘\’

¿por qué? ¿Lo entendí correctamente? y también cuál es la explicación para esto:

 print r'\\' # gives '\\' print r'\\\' # gives SyntaxError 

La única manera de poner una comilla simple en una cadena que comienza con una comilla simple es huir de ella. Por lo tanto, tanto los literales de cadena en bruto como los normales permitirán el escape de los caracteres de comillas cuando tenga una barra invertida sin escapar seguida de un carácter de comillas. Debido al requisito de que debe haber una manera de express comillas simples (o dobles) dentro de literales de cadena que comiencen con comillas simples (o dobles), el literal de cadena '\' no es legal, ya sea que use un literal de cadena normal o sin formato .

Para obtener una cadena arbitraria con un número impar de barras invertidas literales, creo que la mejor manera es usar literales de cadena regulares. Esto se debe a que tratar de usar r'\\' funcionará, pero le dará una cadena con dos barras invertidas en lugar de una:

 >>> '\\' # A single literal backslash. '\\' >>> len('\\') 1 >>> r'\\' # Two literal backslashes, 2 is even so this is doable with raw. '\\\\' >>> len(r'\\') 2 >>> '\\'*3 # Three literal backslashes, only doable with ordinary literals. '\\\\\\' >>> len('\\'*3) 3 

Esta respuesta solo pretende complementar la otra.

En un literal sin formato, la barra diagonal inversa escapará del carácter de comilla que define la cadena.

Las comillas de cadena pueden escaparse con una barra invertida, pero la barra invertida permanece en la cadena; por ejemplo, r"\"" es un literal de cadena válido que consta de dos caracteres: una barra invertida y una comilla doble; r"\" no es un literal de cadena válido (incluso una cadena sin formato no puede terminar con un número impar de barras invertidas). Específicamente, una cadena en bruto no puede terminar en una sola barra invertida (ya que la barra invertida escaparía del siguiente carácter de comillas). Tenga en cuenta que una sola barra invertida seguida de una nueva línea se interpreta como esos dos caracteres como parte de la cadena, no como una continuación de línea .

De los docs