Python не может обрабатывать строку чисел, начиная с 0. Почему?
Я просто выполнил следующую программу на моем интерпретаторе python:
>>> 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
Теперь я видел этот, но, как говорится в ссылке, 0 для восьмеричного больше не работает в python (т.е. не работает в python3). Но не означает ли это, что поведение чисел, начинающихся с 0, должно интерпретироваться должным образом? Либо в базе-2, либо в обычном представлении базы-10? Поскольку это не так, почему python ведет себя так? Это проблема внедрения? Или это семантическая проблема?
Ответы
Ответ 1
Мое предположение заключается в том, что поскольку 012
больше не является восьмеричной константой литерала в python3.x, они не разрешают синтаксис 012
, чтобы избежать странных ошибок обратной совместимости. Рассмотрим ваш python2.x script, который использует восьмеричные константы литерала:
a = 012 + 013
Затем вы переносите его на python 3, и он все еще работает. Он просто дает вам a = 25
вместо a = 21
, как вы ожидали ранее (десятичный). Удачи, отслеживая эту ошибку.
Ответ 2
Из примечаний к выпуску Python 3 http://docs.python.org/3.0/whatsnew/3.0.html#integers
Восьмеричные литералы больше не имеют формы 0720
; Вместо этого используйте 0o720
.
Синтаксис "ведущего нуля" для восьмеричных литералов в Python 2.x был распространенным:
Python 2.7.3
>>> 010
8
В Python 3.x это синтаксическая ошибка, как вы обнаружили:
Python 3.3.0
>>> 010
File "<stdin>", line 1
010
^
SyntaxError: invalid token
Вы все равно можете преобразовать из строк с ведущими нулями, как никогда:
>>> int("010")
10