Warum kann ich eine rohe Zeichenfolge nicht mit einem Backslash beenden? [Duplikat]

7

Ich bin hier verwirrt, obwohl rohe Zeichenketten jedes \ in \ konvertieren, aber wenn dieses \ am Ende erscheint, wird der Fehler ausgelöst.

%Vor%

Aktualisierung:

Dies wird nun auch in Python-FAQs behandelt: Warum können nicht rohe Strings (R-Strings) enden? ein Backslash?

    
Ashwini Chaudhary 23.06.2012, 08:40
quelle

4 Antworten

10

Sie benötigen weiterhin \ , um in rohen Zeichenketten ' oder " zu erhalten, da sonst der Python-Interpreter nicht weiß, wo die Zeichenkette stoppt. In Ihrem Beispiel wird die schließende ' entfernt.

Sonst:

%Vor%

Sehen Sie sich die Syntax-Hervorhebung an, um zu sehen, was ich meine.

    
Eric 23.06.2012, 08:42
quelle
5

Raw-Zeichenfolgen können aufgrund der Funktionsweise des Parsers nicht in einfachen umgekehrten Schrägstrichen enden (es findet jedoch kein tatsächliches Escaping statt). Die Problemumgehung besteht darin, den umgekehrten Schrägstrich danach als ein nicht-raw-Zeichenfolgenliteral hinzuzufügen:

%Vor%

Nicht schön, aber es funktioniert. Sie können Plus hinzufügen, um das Geschehen klarer zu machen, aber es ist nicht notwendig:

%Vor%     
Lennart Regebro 23.06.2012 14:13
quelle
3

Python-Strings werden in zwei Schritten verarbeitet:

  1. Zuerst sucht der Tokenizer nach dem Schlusskurs. Es erkennt Backslashes, wenn es dies tut, aber interpretiert sie nicht - es sucht nur nach einer Folge von String-Elementen gefolgt von der schließenden Anführungszeichen, wobei "String-Elemente" entweder (ein Zeichen, das kein Backslash ist, schließendes Zitat oder a Newline - außer Newlines sind in Triple-Anführungszeichen zulässig, oder (ein Backslash, gefolgt von einem einzelnen Zeichen).

  2. Dann wird der Inhalt der Zeichenfolge interpretiert (Backslash-Escape-Zeichen werden verarbeitet), je nachdem, um welche Art von Zeichenfolge es sich handelt. Das Zeichen r vor einem Zeichenfolgenliteral wirkt sich nur auf diesen Schritt aus.

Karl Knechtel 23.06.2012 12:49
quelle
1

Zitat aus Ссылка :

  

Sogar in einem rohen Literal können Anführungszeichen mit einem Backslash versehen werden, aber der   Backslash bleibt im Ergebnis; Zum Beispiel ist r "\" "eine gültige Zeichenfolge   Literal bestehend aus zwei Zeichen: ein umgekehrter Schrägstrich und ein Anführungszeichen;   r "\" ist kein gültiges Zeichenfolgeliteral (selbst eine rohe Zeichenfolge kann nicht in einem enden   ungerade Anzahl von Backslashes). Insbesondere kann ein rohes Literal nicht enden   ein einzelner umgekehrter Schrägstrich (da der umgekehrte Schrägstrich dem folgenden entgeht   Zitat Zeichen). Beachten Sie auch, dass ein einzelner umgekehrter Schrägstrich gefolgt von a   Newline wird als diese zwei Zeichen als Teil des Literals interpretiert,   nicht als Zeilenfortsetzung.

In der rohen Zeichenkette werden Backslash nicht speziell behandelt, außer , wenn " oder ' vorangestellt ist. Daher ist r'\' oder r"\" keine gültige Zeichenfolge, weil das rechte Anführungszeichen maskiert ist, wodurch das Zeichenfolgenliteral ungültig wird. In diesem Fall besteht kein Unterschied, ob r existiert, d. H.% Co_de% entspricht r'\' und '\' entspricht r"\" .

    
laike9m 17.05.2015 03:51
quelle

Tags und Links