如何避免以"0"开头的python数字文字被视为八进制?

Dav*_*der 11 python octal pep

我正在尝试编写一个小的Python 2.x API来支持获取一个 jobby jobNumber,其中jobNumber提供了一个整数.有时用户提供一个jobNumber以0开头的整数文字,例如037537.(这是因为它们已被R语言所淹没,这是一种明智地考虑的语言037537==37537.)然而,Python认为以"0"开头的整数文字是OCTAL 037537!=37537,而是037537==16223.这让我觉得这是对最小惊喜原则的公然侮辱,幸好看起来这在Python 3中得到了修复---参见PEP 3127.

但我现在仍然坚持使用Python 2.7.所以我的用户这样做:

>>> fetchJob(037537)
Run Code Online (Sandbox Code Playgroud)

并默默地得到错误的工作(16223),或者:

>>> fetchJob(038537)
File "<stdin>", line 1
 fetchJob(038537)
            ^
SyntaxError: invalid token
Run Code Online (Sandbox Code Playgroud)

Python拒绝八进制不兼容的数字.

似乎没有提供任何东西__future__以允许我获得Py3K行为---它必须以某种方式内置到Python,因为它至少需要更改词法分析器.

是否有人知道如何保护我的用户在这种情况下做错工作?目前,我能想到的最好的方法是更改​​该API,以便它采用字符串而不是int.

Mar*_*ers 6

目前,我能想到的最好的方法是更改​​该API,以便它采用字符串而不是int.

是的,我认为考虑到这种情况,这是一个合理的选择.

另一种选择是确保所有作业编号至少包含一个大于7的数字,这样添加前导零将立即给出错误而不是错误的结果,但这似乎比使用字符串更大.

最后一个选择可能是教育您的用户.只需要五分钟左右的时间来解释不添加前导零,如果你这样做会发生什么.即使他们因旧习惯而忘记或意外地添加零,如果他们之前已经听说过,他们更有可能发现问题.