Python: ¿Por qué las cadenas en bruto no pueden tener un número impar de barras invertidas?

Esto funciona bien:

print(r'\\') 

Esto no hace

 print(r'\') 

¿Por qué?

Editar. Entiendo lo que dice el doc . Pero no veo por qué este error / característica / deficiencia debe existir. No me sentiría extraño si esta expresión '\' falla porque obviamente la barra invertida está escapando de la cita. ¿Pero no se supone que las cuerdas en bruto son en bruto ?

Como ejemplo de contador, en Bash puedes escribir esto:

 echo '\' 

Y funciona como se esperaba.

¿Hay algo que ver con los analizadores?

De la documentación ,

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 también 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.

Cuando escribe print(r'\') , Python entiende \' en esa statement como un carácter. Debido a ese error de syntax elevado de Python porque hay una cadena incompleta dentro de la función de impresión. Por ejemplo, si necesita imprimir i am "free" man , debe escribir

 print("i am \"free\" man") 

La limitación se debe al hecho de que necesita de alguna manera incluir un ' dentro de un raw. De lo contrario no hay manera de poner a bob said "I'm not hungry" en una cuerda.

Así que terminas en una situación extraña en la que necesitas un personaje de escape para este caso. Por lo tanto, en cadenas sin procesar, se escapa de a ' con a \ y sí, la \ permanece en la cadena.

Así que r'bob said "I\'m not hungry"' !”

Una solución simple sería usar comillas triples. Por ejemplo: r"""abc"hello'world""" . Incluso si está utilizando cadenas en bruto, las secuencias de escape aún funcionan en algunos casos.