Bug or intended behavior?
Sean DiZazzo
sean.dizazzo at gmail.com
Sat Jun 3 17:59:01 EDT 2017
On Friday, June 2, 2017 at 10:46:03 AM UTC-7, bob gailer wrote:
> On 6/2/2017 1:28 PM, Jussi Piitulainen wrote:
> > sean.dizazzo at gmail.com writes:
> >
> >> Can someone please explain this to me? Thanks in advance!
> >>
> >> ~Sean
> >>
> >>
> >> Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 12:39:47)
> >> [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
> >> Type "help", "copyright", "credits" or "license" for more information.
> >>>>> print "foo %s" % 1-2
> >> Traceback (most recent call last):
> >> File "<stdin>", line 1, in <module>
> >> TypeError: unsupported operand type(s) for -: 'str' and 'int'
> > The per cent operator has precedence over minus. Spacing is not
> > relevant. Use parentheses.
>
>
> In other words "foo %s" % 1 is executed, giving "1". Then "1"-2 is
> attempted giving the error.
> Also: If there is more than one conversion specifier the right argument
> to % must be a tuple.
> I usually write a tuple even if there is only one conversion specifier -
> that avoids the problem
> you encountered and makes it easy to add more values when you add more
> conversion specifiers.
>
> print "foo %s" % (1-2,)
>
> Bob Gailer
I get what it's doing, it just doesn't make much sense to me. Looking at operator precedence, I only see the % operator in regards to modulus. Nothing in regards to string formatting. Is it just a side effect of the % being overloaded in strings? Or is it intentional that it's higher precedence...and why?
Maybe I'm making too big a deal of it. It just doesn't 'feel' right to me.
~Sean
More information about the Python-list
mailing list