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

IDE: Eclipse, python2.6Python de chaîne littérale brute

Lorsque le dernier caractère de la chaîne est anti-slash, il semble s'échapper à la dernière citation unique et traiter mon commentaire dans le cadre de la chaîne. Mais la chaîne brute suppose d'ignorer tous les caractères d'échappement, non? Quel pourrait être le problème? Merci.

Répondre

33

littéraux chaîne brute ne traitent pas antislashs comme lancer des séquences d'échappement sauf lorsque le caractère immédiatement-suivant est le caractère guillemet qui délimitait le littéral, auquel cas la barre oblique inverse ne échapper. La motivation de conception est que les littéraux de chaîne bruts n'existent réellement que pour la commodité d'entrer des modèles d'expression régulière - c'est-à-dire que tous les autres objectifs de conception existent pour d'autres littéraux. Et les modèles RE n'ont jamais besoin de se terminer par une barre oblique inverse, mais ils ont besoin d'inclure toutes sortes de guillemets, d'où la règle. Beaucoup de gens essayent d'utiliser des littéraux de chaîne bruts pour leur permettre d'entrer dans les chemins Windows comme ils sont habitués (avec des barres obliques inverses) - mais comme vous l'avez remarqué, cette utilisation tombe en panne quand vous avez besoin d'un chemin vers fin avec un antislash. Habituellement, la solution la plus simple est d'utiliser avant barres obliques qui runtime C Microsoft et toutes les versions de support de Python comme totalement équivalent dans les chemins:

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

(remarque: font pas ombre noms builtin, comme str, avec vos propres identifiants - c'est une pratique horrible, sans aucun avantage, et à moins que vous ne preniez l'habitude d'éviter cette pratique horrible un jour, vous trouverez vous-même avec un problème méchant à déboguer, quand une partie de votre code piétine sur un nom intégré et une autre partie doit utiliser le nom intégré dans sa signification réelle).

+3

+ 1 sur Python interprétant correctement les chemins Windows en utilisant '/' –

+0

Utilisation légèrement différente mais question similaire: Comment un b64encode() un objet bytes avec une barre oblique inverse littérale à la fin? Si j'essaye b'somestring \ 'j'obtiens une erreur, si je b'somestring \\' il encode les deux barres obliques inverses. – Jerod

Questions connexes