Python cannot handle numbers string starting with 0. Why?

谁说胖子不能爱 提交于 2019-11-26 02:58:37

问题


I just executed the following program on my python interpreter:

>>> def mylife(x):
...     if x>0:
...             print(x)
...     else:
...             print(-x)
... 
>>> mylife(01)
File \"<stdin>\", line 1
mylife(01)
        ^
SyntaxError: invalid token
>>> mylife(1)
1
>>> mylife(-1)
1
>>> mylife(0)
0

Now, I have seen this but as the link says, the 0 for octal does not work any more in python (i.e. does not work in python3). But does that not mean that the the behaviour for numbers starting with 0 should be interpreted properly? Either in base-2 or in normal base-10 representation? Since it is not so, why does python behave like that? Is it an implementation issue? Or is it a semantic issue?


回答1:


My guess is that since 012 is no longer an octal literal constant in python3.x, they disallowed the 012 syntax to avoid strange backward compatibility bugs. Consider your python2.x script which using octal literal constants:

a = 012 + 013

Then you port it to python 3 and it still works -- It just gives you a = 25 instead of a = 21 as you expected previously (decimal). Have fun tracking down that bug.




回答2:


From the Python 3 release notes http://docs.python.org/3.0/whatsnew/3.0.html#integers

Octal literals are no longer of the form 0720; use 0o720 instead.

The 'leading zero' syntax for octal literals in Python 2.x was a common gotcha:

Python 2.7.3
>>> 010
8

In Python 3.x it's a syntax error, as you've discovered:

Python 3.3.0
>>> 010
  File "<stdin>", line 1
    010
      ^
SyntaxError: invalid token

You can still convert from strings with leading zeros same as ever:

>>> int("010")
10


来源:https://stackoverflow.com/questions/13013638/python-cannot-handle-numbers-string-starting-with-0-why

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!