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

2024-05-23 16:24:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个小的python2.xapi来支持获取 jobjobNumber提供,其中jobNumber是一个整数。 有时用户提供一个jobNumber作为一个整数文本 以0开头,例如037537。(这是因为他们 受到R的宠爱,一种理智地认为037537==37537)的语言 但是,Python考虑以“0”开头的整数文本 是八进制,因此037537!=37537,而不是{}。这个 我觉得这是对最小原则的公然侮辱 令人惊讶,谢天谢地,这似乎在Python中得到了修复 3---见PEP 3127。在

但我现在只能使用Python2.7。所以我的用户会这样做:

>>> fetchJob(037537)

默默地找错了工作(16223),或者这样:

^{pr2}$

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

似乎没有任何通过__future__提供给 请允许我获得Py3K行为——它必须是内置的 因为它需要对lexer进行更改 至少。在

有人知道我如何保护我的用户不被 在这种情况下是错误的工作?目前我能想到的最好的 的方法是更改API,使其使用字符串而不是int


Tags: 用户文本语言job数字整数pep八进制
2条回答

At the moment the best I can think of is to change that API so it take a string instead of an int.

是的,考虑到目前的情况,我认为这是一个合理的选择。在

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

最后一个选择是教育用户。只需5分钟左右就可以解释为什么不加前导零,如果加了,会发生什么。即使他们忘记或是由于旧习惯而不小心加了零,如果他们以前听说过这个问题,他们更有可能发现这个问题。在

也许您可以将输入作为一个字符串,去掉前导的零,然后再转换回int?在

test = "001234505"
test = int(test.lstrip("0"))  # 1234505

相关问题 更多 >