2015-10-26 29 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' 

Tôi chỉ sử dụng %r(repr()) trong python2 và nó sẽ hoạt động trong python3.5. Tại sao lại như vậy?định dạng r (repr) của bản in trong python3

Ngoài ra, tôi nên sử dụng định dạng nào?

Trả lời

6

Điều bạn đang tìm kiếm được gọi là cờ chuyển đổi. Và điều đó nên được quy định như thế này

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

Trích dẫn Python 3 của official documentation,

Ba cờ chuyển đổi hiện đang được hỗ trợ: '!s' trong đó kêu gọi str() trên giá trị, '!r' trong đó kêu gọi repr()'!a' trong đó kêu gọi ascii().

Xin lưu ý rằng, Python 2 chỉ hỗ trợ !s!r. Theo

Hai cờ chuyển đổi các Python 2 của official documentation, hiện đang được hỗ trợ: '!s' trong đó kêu gọi str() trên giá trị, và '!r' trong đó kêu gọi repr().


Trong Python 2, bạn có thể đã làm một cái gì đó giống như

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

Nhưng ngay cả trong Python 2 (cũng bằng Python 3), bạn có thể viết tương tự với !r với format, như thế này

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

Trích dẫn ví dụ từ official documentation,

Thay %s%r:

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

@wim Không tìm thấy việc phát hành thực tế nó đã được giới thiệu nhưng theo tài liệu nó có sẵn từ v3.2 – thefourtheye

Các vấn đề liên quan