str在python中的奇怪行为

时间:2014-03-15 16:13:05

标签: python string

我遇到以下代码的问题:

str(0015)

为什么这会返回13以及如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

因为以0开头的数字文字被解释为八进制数和八进制15 ==十进制13

>>>int('15',base=8)
13

>>>13 == 0015
True

如果您需要获得一个4位数的字符串(0015),您可能会发现rjust函数方便:

>>>str(15).rjust(4,'0')
'0015'

答案 1 :(得分:2)

因为以0开头的数字被视为基数为8(八进制)。这是C语言的奇怪遗留,后来被语言的创造者所遗憾。

如果升级到Python 3.x,您会发现您报告的奇怪行为已消失并替换为错误消息。请参阅PEP 3127