为什么Python在前面有0时会改变整数的值?

Gam*_*iac 3 python integer python-2.x

我实现了一个将整数转换为字符串表示的函数intToStr()(下面的代码).

为了测试,我传入了一些值并观察到意外的输出:

print intToStr( 1223) # prints 1223 as expected
print intToStr(01223) # prints  659, surprisingly 
Run Code Online (Sandbox Code Playgroud)

现在,我已经尝试调试它,而我传入的整数确实已经证实了659.

为什么会发生这种情况?如何让python忽略整数文字的前导零?


这是我的函数的代码:

def intToStr(i):
    digits = '0123456789'
    if i == 0:
        return 0
    result = ""
    while i > 0:
        result = digits[i%10] + result
        i /= 10
    return result
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 9

以0开头的整数文字被解释为八进制数,基数为8:

>>> 01223
659
Run Code Online (Sandbox Code Playgroud)

这在Python 3中已经改变,其中前导0的整数被认为是错误:

>>> 01223
  File "<stdin>", line 1
    01223
        ^
SyntaxError: invalid token
>>> 0o1223
659
Run Code Online (Sandbox Code Playgroud)

你永远不应该指定带前导零的整数文字; 如果您打算指定八进制数,请使用0o启动它,否则删除那些零.