%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