Me encontré con algo que hace mucho tiempo y me pregunté si se trataba de un "error" o al menos un error de Python. Tengo curiosidad si alguien sabe de alguna justificación para este comportamiento. Pensé en leer ahora "Code Like a Pythonista", que hasta ahora ha sido agradable. Solo estoy familiarizado con la línea 2.x de Python.Cadenas de Python raw y barra diagonal inversa
Las cadenas sin formato son cadenas que llevan el prefijo r
. Esto es genial porque puedo usar barras diagonales inversas en expresiones regulares y no necesito duplicar todo en todas partes. También es útil para escribir scripts desechables en Windows, así que también puedo usar barras diagonales inversas. (Sé que también puedo usar barras diagonales, pero las secuencias de comandos desechables a menudo contienen contenido cortado & pegado de otra parte en Windows.)
¡Tan bueno! A menos que, por supuesto, realmente quieras que tu cadena termine con una barra invertida. No hay forma de hacerlo en una cadena 'en bruto'.
In [9]: r'\n'
Out[9]: '\\n'
In [10]: r'abc\n'
Out[10]: 'abc\\n'
In [11]: r'abc\'
------------------------------------------------
File "<ipython console>", line 1
r'abc\'
^
SyntaxError: EOL while scanning string literal
In [12]: r'abc\\'
Out[12]: 'abc\\\\'
Así que una barra invertida antes de la cotización de cierre es un error, sino dos barras invertidas le da dos barras invertidas! Ciertamente, no soy el único que está molesto por esto?
¿Por qué las cadenas de caracteres 'en bruto' están 'en bruto, excepto para la comilla inversa'? Quiero decir, si quisiera insertar una única cita allí, simplemente usaría comillas dobles alrededor de la cadena, y viceversa. Si quisiera las dos, solo triplicaría la cita. Si realmente quisiera tres citas seguidas en una cadena en bruto, bueno, supongo que tendría que tratar, pero ¿se considera esto un "comportamiento correcto"?
Esto es particularmente problemático con los nombres de carpeta en Windows, donde la barra diagonal inversa es el delímetro de ruta.
parece ciertamente como un misfeature. –
@DS: ¿Su diseño alternativo sugerido para cadenas sin formato es ...? –
No sabía que era una pregunta frecuente, pero probablemente debería haberlo supuesto. ;) No estoy hablando de @DS, pero mi diseño alternativo es "sin procesamiento de escape". ¿Sabes algo así como lo que dice en la lata? –