SyntaxError invalid token

The problem is the 0 before the 4. If you want to store that kind of infos, try using strings.

a = (2016,04,03) --> Error
a = (2016,4,3) --> No Error
a = ("2016","04","03") --> No Error
a = "2016-04-03" --> you could retrieve Year, Month and Day by splitting this string

In Python 2.x 04 is interpreted as an octal number. In Python 3 octal numbers are written in form 0o4 as written here : http://docs.python.org/3.0/whatsnew/3.0.html#integers


In Python 3, leading zeros are not allowed on numbers. E.g:

05
0123

Etc. are not allowed, but should be written as 5 and 123 instead.

In Python 2, however, the leading zero signifies that the number is an octal number (base eight), so 04 or 03 would mean 4 and 3 in octal, respectively, but 08 would be invalid as it is not a valid octal number.

In Python 3, the syntax for octals changed to this:

0o10
0o4

(As well as allowing other bases such as binary and hexadecimal using the 0b or 0x prefixes.)

As for your other question, a token in Python is the way the Python interpreter splits up your code into chunks, so that it can understand it (see here). Here, when the tokenizer tries to split up your code it doesn't expect to see the zero there and so throws an error.

I would suggest (similarly to the other answers) that you drop the leading zero ((2016,4,3)) or represent these using strings (("2016","04","03")).


04 is a valid integer literal in Python 2.x. It is interpreted as a base-8 (octal) number. 09 would be an invalid token as well, since 9 is not a valid octal digit.

In Python 3, the form of octal literals changed. A leading zero alone is no longer valid; you need to explicitly specify the base. For example, 0o12 is equal to 10.

In your case, you probably want to just drop the leading 0: a = (2016, 4, 3). Leading zeros could be added to the string representation of your tuple when necessary, rather than trying to store them explicitly.