2015-10-26 19 views
5
>>>print('You say:{0:r}'.format("i love you")) 
Traceback (most recent call last): 
    File "<pyshell#5>", line 1, in <module> 
    print('You say:{0:r}'.format("i love you")) 
ValueError: Unknown format code 'r' for object of type 'str' 

benutze ich nur %r(repr()) in python2, und es sollte in python3.5 arbeiten. Warum ist es?Format r (repr) von Druck in python3

Außerdem, welches Format sollte ich verwenden?

Antwort

6

Was Sie suchen, heißt Conversion-Flag. '!s' die str()'!r' auf den Wert, ruft die repr() und '!a' ruft die ascii() ruft: Und das sollte wie dieses

>>> print('you say:{0!r}'.format("i love you")) 
you say:'i love you' 

Python 3 des official documentation,

Drei Umwandlung Flaggen werden derzeit unterstützt Zitiert angegeben werden.

Bitte beachten Sie, dass Python 2 nur !s und !r unterstützt. Richtet sich nach den official documentation, Python 2

Zwei Umwandlung Flaggen werden derzeit unterstützt: '!s' die str() auf den Wert nennt, und '!r' die repr() nennt.


In Python 2, haben Sie vielleicht so etwas wie

>>> 'you say: %r' % "i love you" 
"you say: 'i love you'" 

Aber auch in Python 2 (auch in Python 3) durchgeführt, können Sie das gleiche mit !r mit format, so schreiben

>>> 'you say: {!r}'.format("i love you") 
"you say: 'i love you'" 

Zitiert Beispiel aus official documentation,

Ersetzen %s und %r:

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2') 
"repr() shows quotes: 'test1'; str() doesn't: test2" 
+0

@wim kann nicht die eigentliche Release findet es eingeführt wurde, aber laut der Dokumentation ist es seit v3.2 verfügbar – thefourtheye