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

IDE: Eclipse python2.6Python rohe Zeichenkette

Wenn das letzte Zeichen in der Zeichenfolge ist Backslash, so scheint es, wird die letzte Apostroph zu entkommen und meinen Kommentar als Teil der Zeichenfolge zu behandeln. Aber die rohe Zeichenfolge soll alle Escape-Zeichen ignorieren, richtig? Was könnte falsch sein? Vielen Dank.

Antwort

33

Raw Stringliterale nicht behandelt Schrägstriche als Escape-Sequenzen initiiert außer wenn die unmittelbar folgenden Zeichen das Zitat-Zeichen ist, dass die wörtlich ist begrenzt, in welchem ​​Fall die Backslash tut es zu entkommen.

Die Entwurfsmotivation ist, dass rohe Zeichenkettenliterale wirklich nur für die Bequemlichkeit vorhanden sind, reguläre Ausdruckmuster einzutragen - das ist alles kein anderes Entwurfsziel existiert für solche Literale. Und RE-Muster müssen nie mit einem Backslash enden, aber sie müssen müssen alle Arten von Zitat Zeichen enthalten, woher die Regel.

Viele Leute versuchen, rohe Zeichenkettenliterale zu verwenden, um ihnen zu ermöglichen, Windowspfade wie gewohnt einzugeben (mit umgekehrten Schrägstrichen) - aber wie Sie bemerkt haben, bricht diese Verwendung zusammen, wenn Sie einen Pfad zu benötigen Ende mit einem Backslash. Normalerweise ist die einfachste Lösung vorwärts Schrägstriche zu verwenden, die Microsoft C-Laufzeit und alle Version von Python-Unterstützung als völlig gleichwertig in Pfaden:

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

(Randbemerkung: nicht Schatten gebautet Namen, wie str, mit Ihren eigenen Identifikatoren - es ist eine schreckliche Praxis, ohne irgendeinen Vorteil, und wenn Sie nicht die Angewohnheit haben, diese schreckliche Praxis eines Tages zu vermeiden, finden Sie Ihreld mit einem scheußlich zu debuggenden Problem, wenn ein Teil Ihres Code trampelt über einen eingebauten Namen und ein anderer Teil muss verwenden der eingebaute Name in seiner wahren Bedeutung).

+3

+ (auch eine rohe Zeichenkette nicht in einer ungerade Anzahl von Backslash enden kann) 1 auf Python richtig interpretieren Windows-Pfade mit '/' –

+0

Etwas andere Verwendung, aber ähnliche Frage: Wie b64encode() ein Byte-Objekt mit einem umgekehrten Schrägstrich am Ende? Wenn ich b'somestring versuche, bekomme ich einen Fehler, wenn ich b'somestring \\ 'es beide Backslashes codiert. – Jerod

Verwandte Themen