Я пытаюсь написать небольшой API Python 2.x для поддержки получения
job
на jobNumber
, где jobNumber
предоставляется как целое число.
Иногда пользователи предоставляют jobNumber
как целочисленный литерал
начиная с 0, например. 037537
. (Это потому, что они были
смущенный R, язык, который считает разумным 037537==37537
.)
Однако Python рассматривает целочисленные литералы, начиная с "0" до
быть OCTAL, таким образом 037537!=37537
, вместо 037537==16223
. Эта
поражает меня как вопиющее оскорбление принципа наименьшего
сюрприз, и, к счастью, похоже, что это было исправлено в Python
3 --- см. PEP 3127.
Но я застрял с Python 2.7 на данный момент. Поэтому мои пользователи делают это:
>>> fetchJob(037537)
и тихонько получить неправильное задание (16223), или это:
>>> fetchJob(038537)
File "<stdin>", line 1
fetchJob(038537)
^
SyntaxError: invalid token
где Python отклоняет восьмеричную несовместимую цифру.
Кажется, что ничего не предоставляется через __future__
, чтобы
позвольте мне получить поведение Py3K - он должен быть встроен
на Python в некотором роде, поскольку для этого требуется изменение lexer
по крайней мере.
Кто-нибудь знает, как я могу защитить своих пользователей от получения неправильная работа в таких случаях? На данный момент лучшее, что я могу думать из этого заключается в том, чтобы изменить этот API, чтобы он принимал строку вместо int.