class A(object):
def __getitem__(self, item):
print item
a = A()
a[0:-1]
Windows上的python 2.7.3,2.7.7,2.7.8,3.3.2上的输出:
slice(0, -1, None)
win 32上的python 2.7.6(32位)输出:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: A instance has no attribute '__len__'
在python 2.7.6中,切片对象试图获取实例的长度,以便它可以转换&#39; -1&#39;真正的价值。例如,如果实例的长度为10,则输出将为&#39; slice(0,9,None)&#39;。
这种行为似乎很奇怪。任何人都可以验证我的观察是否正确吗?如果是,那么这背后是否有任何官方文件?我们如何处理这种行为以支持我们在所有版本的python上的项目?
答案 0 :(得分:0)
看起来像是存在于2.7.3和2.7.8之间的错误
Python 2.7.8 (default, Jul 1 2014, 17:30:21)
[GCC 4.9.0 20140604 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class A(object):
... def __getitem__(self, item):
... print item
...
>>> a = A()
>>> a[0:-1]
slice(0, -1, None)
对战
Python 2.7.3 (default, Feb 27 2014, 19:58:35)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class A(object):
... def __getitem__(self, item):
... print item
...
>>> a = A()
>>> a[0:-1]
slice(0, -1, None)
它可能在Windows上。在Windows上尝试2.7.8,看看你是否可以在那里重现它。