2010-08-19 15 views
11
str = r'c:\path\to\folder\' # my comment 

IDE: Eclipse, Python2.6Python prima cadena literal

Cuando el último carácter de la cadena es la barra invertida, parece escapará a la última comilla simple y tratar mi comentario como parte de la cadena. Pero la cadena en bruto supone ignorar todos los caracteres de escape, ¿verdad? ¿Qué podría estar mal? Gracias.

Respuesta

33

literales de cadena Raw no tratan barras invertidas como el inicio de secuencias de escape excepto cuando el personaje sigue inmediatamente es la cita de caracteres que se delimitan el literal, en cuyo caso la barra invertida hace escapar de ella.

La motivación de diseño es que los literales de cadena primas realmente existen sólo para la conveniencia de entrar en patrones de expresiones regulares - eso es todo, existe ningún otro objetivo de diseño para tales literales. Y los patrones de RE nunca deben terminar con una barra inclinada invertida, pero pueden incluir todos los tipos de caracteres de comillas, de ahí la regla.

Muchas personas intentan usar literales de cadena sin procesar para permitirles ingresar a las rutas de Windows de la manera en que están acostumbrados (con barras diagonales inversas), pero como habrán notado, este uso se rompe cuando necesita un camino hacia terminar con una barra invertida. Por lo general, la solución más sencilla es utilizar hacia adelante barras, que en tiempo de ejecución de Microsoft C y todas las versiones de soporte de Python como totalmente equivalente en caminos:

s = 'c:/path/to/folder/' 

(nota al margen: No nombres sombra orden interna, como str, con sus propios identificadores: es una práctica horrible, sin ninguna ventaja, y a menos que adquiera el hábito de evitar esa práctica horrible algún día encontrará un problema desagradable de depurar, cuando alguna parte de su el código se atropella sobre un nombre incorporado y otra parte necesita use el nombre incorporado en su significado real).

+3

+ 1 en Python interpretando las rutas de Windows correctamente usando '/' –

+0

Uso ligeramente diferente pero pregunta similar: ¿cómo hace un b64encode() un objeto de bytes con una barra invertida literal al final? Si intento b'somestring \ 'obtengo un error, If I b'somestring \\' codifica ambas barras invertidas. – Jerod

Cuestiones relacionadas