当前位置: 首页 > 面试题库 >

Python无法处理以0开头的数字字符串。为什么?

束帅
2023-03-14
问题内容

我刚刚在python解释器上执行了以下程序:

>>> def mylife(x):
...     if x>0:
...             print(x)
...     else:
...             print(-x)
... 
>>> mylife(01)
File "<stdin>", line 1
mylife(01)
        ^
SyntaxError: invalid token
>>> mylife(1)
1
>>> mylife(-1)
1
>>> mylife(0)
0

现在,我已经看到了,但是正如链接所言,八进制的0在python中不再起作用(即在python3中不起作用)。但这是否意味着应该正确解释以0开头的数字的行为?是以base-2还是以正常base-10表示?既然不是这样,为什么python会那样表现呢?这是实施问题吗?还是语义问题?


问题答案:

我的猜测是,由于012在python3.x中不再是八进制文字常量,因此他们不允许使用该012语法以避免奇怪的向后兼容错误。考虑使用八进制常量的python2.x脚本:

a = 012 + 013

然后将其移植到python 3,它仍然可以工作-它只是提供给您a = 25而不是a = 21您以前期望的(十进制)。追踪该错误很有趣。



 类似资料:
  • 问题内容: 如标题所述: 我有一个选择查询,我正在尝试对包含数字的字段进行“排序”,问题是此数字实际上是以0开头的字符串,因此“ order by”正在执行此操作… 有什么想法吗? 编辑:如果我这样做:“ … ORDER BY(field + 1)”我可以解决此问题,因为以某种方式在内部将字符串转换为整数。这是像C的atoi一样“正式”转换它的方法吗? 问题答案: 您可以使用 http://www

  • 问题内容: 如何将“ 09”解析为9? 问题答案: 包括基数:

  • 问题内容: 当我在python中输入前面带有0的小整数时,它们给出了奇怪的结果。为什么是这样? 注意:Python版本2.7.3我已经在Python 3.0中进行了测试,显然现在这是一个错误。因此,这是特定于版本的。 编辑:它们显然仍然是整数: 问题答案: 这些是以8为底的数字(八进制数字)。一些例子: Python 2(旧格式) 注意:这些形式仅适用于。 等于 等于 等于 Python 3(新格

  • 我正在尝试解析一些json,这样我就可以得到json的不同部分。当我使用以下代码时 我得到了一个错误: 你知道为什么我会犯这个错误吗?我能够用在线json验证器验证json

  • 问题内容: 为什么在Java中(我不知道任何其他编程语言)标识符不能以数字开头,为什么也不允许以下声明? 问题答案: 通常,您将这种限制放入其中有两个原因: 用电子方式解析很痛苦。 对人类来说这是一个痛苦的解析。 考虑以下代码片段: 如果是合法标识符,那么末尾有哪个值?-3还是2?这是模棱两可的。 同时考虑: 最后有什么价值?这也是模棱两可的。 另外,以任何一种方式阅读都是很痛苦的。如果有人声明,

  • Pandas 提供了一系列的字符串函数,因此能够很方便地对字符串进行处理。在本节,我们使用 Series 对象对常用的字符串函数进行讲解。 常用的字符串处理函数如下表所示: 函数名称 函数功能和描述 lower() 将的字符串转换为小写。 upper() 将的字符串转换为大写。 len() 得出字符串的长度。 strip() 去除字符串两边的空格(包含换行符)。 split() 用指定的分割符分割