我正在尝试编写一个小型 Python 2.x API 来支持获取
job
by jobNumber
,其中jobNumber
以整数形式提供。有时用户会提供一个jobNumber
以 0 开头的整数文字,例如037537
. (这是因为它们被 R 宠坏了,R 是一种理智地认为 . 的语言037537==37537
。)然而,Python 认为以“0”开头的整数文字是八进制,因此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 中,因为它至少需要对词法分析器进行更改。
有谁知道在这种情况下我可以如何保护我的用户免于得到错误的工作?目前我能想到的最好的方法是更改该 API,使其采用字符串而不是 int。