format() not behaving as expected

MRAB python at mrabarnett.plus.com
Fri Jun 29 13:02:45 EDT 2012


On 29/06/2012 17:31, Josh English wrote:
> I have a list of tuples, and usually print them using:
>
> print c, " ".join(map(str, list_of_tuples))
>
> This is beginning to feel clunky (but gives me essentially what I want), and I thought there was a better, more concise, way to achieve this, so I explored the new string format and format() function:
>
>>>> c = (1,3)
>>>> s = "{0[0]}"
>>>> print s.format(c)
> '1'
>>>> print format(c,s)
> Traceback (most recent call last):
>    File "<interactive input>", line 1, in <module>
> ValueError: Invalid conversion specification
>
> I'm running *** Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32. ***
> (This is actually a PortablePython run on a Windows 7 machine)
>
> Any idea why one form works and the other doesn't?
>
The ".format" method accepts multiple arguments, so the placeholders in
the format string need to specify which argument to format as well as
how to format it (the format specification after the ":").

The "format" function, on the other hand, accepts only a single
argument to format, so it needs only the format specification, and
therefore can't accept subscripting or attributes.

 >>> c = "foo"
 >>> print "{0:s}".format(c)
foo
 >>> format(c, "s")
'foo'



More information about the Python-list mailing list