问题描述
我正在创建一个类似列表的对象,其中包含大量元素,但是当我运行以下代码时,出现错误。
class test:
def __init__(self,n):
self.n = n
def __len__(self):
return self.n
instance = test(10**20)
print(len(instance))
我返回的错误是: 溢出错误:无法将“int”放入索引大小的整数中
有人知道出了什么问题吗?
解决方法
这是一个 CPython 实现细节。来自__len__
docs:
在 CPython 中,长度最多为 sys.maxsize
。如果
长度大于 sys.maxsize
某些特征(例如 len()
)
可能会引发 OverflowError
。防止通过真相引发 OverflowError
值测试,一个对象必须定义一个 __bool__()
方法。