Home » Python » When to use %r instead of %s in Python? [duplicate]

When to use %r instead of %s in Python? [duplicate]

Posted by: admin November 1, 2017 Leave a comment


This question already has an answer here:


The %s specifier converts the object using str(), and %r converts it using repr().

For some objects such as integers, they yield the same result, but repr() is special in that (for types where this is possible) it conventionally returns a result that is valid Python syntax, which could be used to unambiguously recreate the object it represents.

Here’s an example, using a date:

>>> import datetime
>>> d = datetime.date.today()
>>> str(d)
>>> repr(d)
'datetime.date(2011, 5, 14)'

Types for which repr() doesn’t produce Python syntax include those that point to external resources such as a file, which you can’t guarantee to recreate in a different context.


Use the %r for debugging, since it displays the “raw” data of the variable,
but the others are used for displaying to users.

That’s how %r formatting works; it prints it the way you wrote it (or close to it). It’s the “raw” format for debugging. Here \n used to display to users doesn’t work. %r shows the representation if the raw data of the variable.

months = "\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"
print "Here are the months: %r" % months


Here are the months: '\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug'

Check this example from Learn Python the Hard Way.


%r shows with quotes:

It will be like:

I said: 'There are 10 types of people.'.

If you had used %s it would have been:

I said: There are 10 types of people..


This is a version of Ben James’s answer, above:

>>> import datetime
>>> x = datetime.date.today()
>>> print x
>>> print "Today's date is %s ..." % x
Today's date is 2013-01-11 ...
>>> print "Today's date is %r ..." % x
Today's date is datetime.date(2013, 1, 11) ...

When I ran this, it helped me see the usefulness of %r.