Python Version 3.4 unterstützt kein Präfix 'ur'

9

Ich habe etwas Python-Code geschrieben in einer älteren Version von Python (2.x) und ich habe Mühe damit es funktioniert. Ich benutze Python 3.4

%Vor%

(Teil eines Tokenizers)

    
user_s 26.09.2014, 16:13
quelle

3 Antworten

11

Ссылка

Titel: Drop-Unterstützung für das "ur" -String-Präfix
Wenn PEP 414 die Unterstützung für explizite Unicode-Literale in Python 3 wiederherstellte, wurde das Zeichen "ur" als Synonym für das Präfix "r" betrachtet.

Benutze also 'r' anstelle von 'ur'

    
KevinDTimm 26.09.2014, 16:18
quelle
10

Tatsächlich unterstützt Python 3.4 nur u'...' (um Code zu unterstützen, der sowohl auf Python 2 als auch auf 3 laufen muss) und r'....' , aber nicht beides. Das liegt daran, dass die Semantik der Funktionsweise von ur'..' in Python 2 anders ist als die von ur'..' in Python 3 (in Python 2 werden% codes% und \uhhhh escapes noch verarbeitet, in Python 3 a 'r'). .. 'String würde nicht).

Beachten Sie, dass es in diesem spezifischen Fall keinen Unterschied zwischen dem rohen String-Literal und dem regulären String gibt! Sie können einfach verwenden:

%Vor%

und es wird in Python 2 und 3 funktionieren.

In Fällen, in denen ein roher String-Literal von Bedeutung ist, könnten Sie die rohe Zeichenfolge von \Uhhhhhhhh in Python 2 dekodieren und die raw_unicode_escape in Python 3 abfangen:

%Vor%

Wenn Sie Python 3-Code schreiben only (damit er nicht mehr auf Python 2 ausgeführt werden muss), löschen Sie einfach den AttributeError ganz:

%Vor%     
Martijn Pieters 26.09.2014 16:17
quelle
3

Diese Tabelle vergleicht (einige von) die verschiedenen String-Literal-Präfixe in Python 2 (.7) und 3 (.4+):

Wie Sie sehen, gibt es in Python 3 keine Möglichkeit, ein Literal zu haben, das keine Escapes verarbeitet, sondern Unicode-Literale verarbeitet. Um eine solche Zeichenfolge mit Code zu erhalten, der sowohl in Python 2 als auch in 3 funktioniert, verwenden Sie:

%Vor%

Eigentlich ist Ihr Beispiel nicht sehr gut, da es keine Unicode-Literale oder Escape-Sequenzen hat. Ein besseres Beispiel wäre:

%Vor%

In Python 2:

%Vor%

In Python 3:

%Vor%

Was ist wirklich das Gleiche?

    
itsadok 21.03.2017 10:22
quelle

Tags und Links