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