Я пытаюсь написать небольшой 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.