как избежать того, чтобы числовые литералы python, начинающиеся с «0», рассматривались как восьмеричные?

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

11
задан David Alexander 16 July 2012 в 22:22
поделиться