解析整数时Python标记生成器的奇怪行为

时间:2017-11-15 16:01:49

标签: python parsing numbers integer token

我注意到CPython3和Pypy3的以下事实,与CPython2和Pypy2的行为形成对比:

在Python3中,当解析代码产生错误时,它看起来像前导零,除了一个非常单一的数字0 。因此00有效,但不是042

在Python2中,所有整数都允许前导零。因此00042有效。

为什么Python会改变两个版本之间的行为?

1 个答案:

答案 0 :(得分:2)

Python 3标准化了所有整数文字(基数10除外)的定义:0?dddd...,其中?是表示基数的单个字母,每个d被解释为适当基数的数字。 0...被保留为异常,因为0在任何基数中都是0,并且在需要明确的基本说明符之前被接受。

与此相关的最大变化是具有前导零但没有明确的基本说明符的数字不再被假定为八进制数。 Python 2同时接受0420o42作为十进制34的八进制表示。(在Python的早期历史中,只有三个有效的文字,十六进制是唯一一个带有说明符的文字。{ {1}}和0o...都是后来添加的