RE: Python Question About Format Specifiers

  • From: "Homme, James" <james.homme@xxxxxxxxxxxx>
  • To: "programmingblind@xxxxxxxxxxxxx" <programmingblind@xxxxxxxxxxxxx>
  • Date: Tue, 7 Jun 2011 06:57:17 -0400

Hi Chris,
This is my understanding of what you said. If you really want to see what 
something looks like, use %r. If you want to see how it is represented by some 
object, use %s. Is that anywhere close?

Thanks.

Jim

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

%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

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

Other related posts: