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