Re: Python Question About Format Specifiers

  • From: Q <q@xxxxxxxxxxxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Mon, 06 Jun 2011 23:50:48 -0400

%r vs. %s...
Use cases:
Use standard format characters (%s, %d, %.2f) when formatting output you can trust. Use %r when you need to output something you cannot trust, for instance if you're logging a failed condition and don't actually know current state of some object. For instance:

 try:
  do_something(some_val)
 except SomeStrangeError:
logging.exception("Failed to do something. Value of some_val was %r" % some_val

Because an exception was thrown, and at this point we don't know why, we want to communicate the state of the program as well as we can to the log. This means printing out the raw state of the referenced some_val using %r. Then we don't have to worry about the format characters potentially munging our some_val into a different format for presentation and potentially hiding something. Also, since __str__, the method which is called when you go str(some_obj), which is what's going on under the covers when you use %s in your statements, might have side effects. Consider the case of an object which is initialized with a name, and whose __str__ method prints a representation of the object which includes that name. Then, imagine you've got code logging with that object, instantiate one, forget to give it a name, so the __str__ method raises an exception. So if then you try to log an exception with a string representation of the object, that also raises an exception and your log doesn't get written. This would obviously be poor design, as an object should complain about not getting a name by default, but it is for illustrative purposes.
I hope this demystifies things a bit,
    Q


On 6/6/2011 3:52 PM, Homme, James wrote:
Hi Dave,
I read in the Python Standard Library documentation about %r and %s, and one 
said that it uses repr, and the other said that it uses str. Next time, I'll 
follow the documentation path the whole way and actually go and read about the 
functions. Thanks for being so nice about answering this.

Jim

-----Original Message-----
From: programmingblind-bounce@xxxxxxxxxxxxx 
[mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of David Tseng
Sent: Monday, June 06, 2011 3:36 PM
To: programmingblind@xxxxxxxxxxxxx
Subject: Re: Python Question About Format Specifiers

http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python

In other words, it's the difference between repr() and str().

On 6/6/11, Homme, James<james.homme@xxxxxxxxxxxx>  wrote:
Hi,
My goal in this program is to properly explain above lines what they are
doing. I'm unsure what goes on with the last line. I see what it's doing
when I run the program, but I don't know why it's doing it.

# Get some input from the user and work with it.
#
# Print and use a comma to make the input go to the same line as the
question.
print "How old are you?",
# Get input and put it into age.
age = raw_input()
# Now, give the prompt and get the input all at once.
# Note that now we have to put a space at the end of the quoted string.
height = raw_input("How tall are you? ")
# Now do it again.
weight = raw_input("How much do you weigh? ")
# Now print out the variables with raw string format specifiers.
# This turns them into single quoted strings properly formatted.
print "So, you're %r old, %r tall and %r heavy." % ( age, height, weight)
# I'm unsure how changing this to %s does what it does.
print "So number 2, you're %s old, %s tall and %s heavy." % ( age, height,
weight)

Thanks.

Jim
Jim Homme,
Usability Services,
Phone: 412-544-1810.


________________________________
This e-mail and any attachments to it are confidential and are intended
solely for use of the individual or entity to whom they are addressed. If
you have received this e-mail in error, please notify the sender immediately
and then delete it. If you are not the intended recipient, you must not
keep, use, disclose, copy or distribute this e-mail without the author's
prior permission. The views expressed in this e-mail message do not
necessarily represent the views of Highmark Inc., its subsidiaries, or
affiliates.

__________
View the list's information and change your settings at
//www.freelists.org/list/programmingblind

__________
View the list's information and change your settings at
//www.freelists.org/list/programmingblind


__________
View the list's information and change your settings at //www.freelists.org/list/programmingblind

Other related posts: