我正在尝试编写一个小的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.
目前,我能想到的最好的方法是更改该API,以便它采用字符串而不是int.
是的,我认为考虑到这种情况,这是一个合理的选择.
另一种选择是确保所有作业编号至少包含一个大于7的数字,这样添加前导零将立即给出错误而不是错误的结果,但这似乎比使用字符串更大.
最后一个选择可能是教育您的用户.只需要五分钟左右的时间来解释不添加前导零,如果你这样做会发生什么.即使他们因旧习惯而忘记或意外地添加零,如果他们之前已经听说过,他们更有可能发现问题.
| 归档时间: |
|
| 查看次数: |
1505 次 |
| 最近记录: |