Format Strings -- Real vs. Expected Behaviour

Brad Bollenbach bbollenbach at homenospam.com
Mon Apr 16 21:21:55 EDT 2001


Ah, the one element I forgot about...precedence. :) Thanks for the info.

"Grant Edwards" <grante at visi.com> wrote in message
news:slrn9dn5k4.bt5.grante at isis.visi.com...
> In article <NpMC6.4660$4I5.385432 at news1.rdc1.mb.home.com>, Brad Bollenbach
wrote:
>
> >    print "%s " + \
> >    "%s" % ("hello", "world")
> >
> >Results in "TypeError: not all arguments converted".
>
> >but this:
> >
> >    print ("%s " + \
> >    "%s") % ("hello", "world")
> >
> >prints "hello world" as well.
> >
> >Shouldn't Python be smart enough to know that even without ()'s around
the
> >whole thing, this is all one line (therefore avoiding the current
> >odd/unexpected IMHO behaviour with the format string)? After all, I'm
> >telling it this much by using the line continuation character "\" aren't
I?
>
> It's got nothing to do with the continuation character or being all one
> line. Putting it all on one line results in the same "unexpected"
behavior:
>
> >>> print "%s " + "%s" % ('hello', 'world')
> Traceback (innermost last):
>   File "<stdin>", line 1, in ?
> TypeError: not all arguments converted
>
> The "%" operator has a higher precedence than the "+" operator.
> Without the explicit grouping, what you have is (in effect)
>
> print "%s" + ("%s" % ('hello','world))
>
> The format "%" operator sees the format sting "%s" and the data value of
> ('hello','world').  You've provided two pieces of data and a format string
> that only converts one of them.
>
> --
> Grant Edwards                   grante             Yow!  Two LITTLE black
>                                   at               dots and one BIG black
>                                visi.com            dot...nice 'n' FLUFFY!!





More information about the Python-list mailing list