如何避免以“0”开头的Python数字文字被视为八进制?

2023-11-27

我正在尝试编写一个小型 Python 2.x API 来支持获取job by jobNumber, where 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 "<stdin>", line 1
 fetchJob(038537)
            ^
SyntaxError: invalid token

其中 Python 拒绝八进制不兼容的数字。

似乎没有通过以下方式提供任何内容__future__到 让我获得 Py3K 行为——它必须是内置的 以某种方式转换为 Python,因为它需要更改词法分析器 至少。

有谁知道我如何保护我的用户免受 在这种情况下,工作是错误的吗?目前我能想到的最好的 of 的目的是更改该 API,使其采用字符串而不是 int。


目前我能想到的最好的办法就是更改该 API,使其采用字符串而不是 int。

是的,鉴于目前的情况,我认为这是一个合理的选择。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免以“0”开头的Python数字文字被视为八进制? 的相关文章

随机推荐