Inconsistency in Python?

Duncan Booth duncan at
Thu Aug 29 04:23:43 EDT 2002

dance_code at (lion) wrote in 
news:e895ad50.0208290000.51f842ec at

>>>> 2.__abs__()
> SyntaxError: invalid syntax
>>>> a=2
>>>> a.__abs__()
> 2
> It reports a syntax error! Though I know the code upside is useless,
> is it inconsistency in Python?

This really should be in the FAQ, but since I can't find it anywhere.

>>> 2.__abs__()
 SyntaxError: invalid syntax
>>> a=2.
>>> a __abs__()
SyntaxError: invalid syntax

You see, it is perfectly consistent. '2.' is a floating point constant. Two 
names or values without an intervening operator is a syntax error.

You will notice that I had to insert a space between 'a' and '__abs__' 
otherwise I would have got a name error because the compiler couldn't tell 
I meant two separate symbols. You wouldn't be surprised at this, so why 
should you be surprised if you have to insert a space between '2' and '.' 
to make the compiler see them as separate symbols?

>>> 2 .__abs__()

works fine for those rare occasions when you want the absolute value of a 
literal positive integer.

There is another trap here for the unwary:

>>> -2 .__abs__()

The dot operator binds more tightly than the unary minus, so you need 
parentheses if you want to use it on literal negative integers.

Duncan Booth                                             duncan at
int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
"\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?

More information about the Python-list mailing list