Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当>;64位_Python_Ipv6_Long Integer - Fatal编程技术网

Python 当>;64位

Python 当>;64位,python,ipv6,long-integer,Python,Ipv6,Long Integer,在这个问题中,我处理的是IPv6网络地址空间,因此长度是2^(128子网) 看起来python(至少在这台机器上)将处理多达64位的有符号数字作为\uuu len\uuu()的返回值。所以len(IP('2001::/66'))工作,但len(IP('2001::/65'))失败 from IPy import IP len(IP('2001::/64')) Traceback (most recent call last): File "test.py", line 2, in <m

在这个问题中,我处理的是IPv6网络地址空间,因此长度是
2^(128子网)

看起来python(至少在这台机器上)将处理多达64位的有符号数字作为
\uuu len\uuu()
的返回值。所以
len(IP('2001::/66'))
工作,但
len(IP('2001::/65'))
失败

from IPy import IP
len(IP('2001::/64'))
Traceback (most recent call last):
  File "test.py", line 2, in <module>
      len(IP('2001::/64'))
OverflowError: long int too large to convert to int
从IPy导入IP
len(IP('2001::/64'))
回溯(最近一次呼叫最后一次):
文件“test.py”,第2行,在
len(IP('2001::/64'))
溢出错误:长整型太大,无法转换为整型
有关的IPy图书馆位于


有没有关于如何处理这个问题的建议,或者有没有暗示这可能是一个我一直坚持的限制?

您遇到的问题是Python的C API对容器的长度有一个依赖于系统的限制。也就是说,C函数
PyObject\u Size
返回一个
Py\u ssize\u t
值,该值是标准C
Size\u t
类型的签名版本。它的大小取决于系统,但在32位系统上可能是32位,在64位系统上可能是64位

内置的
len
函数使用
PyObject\u Size
,因此具有相同的限制。这是:


这是纯python,因此它对整数大小没有任何限制。

+1因为我对此感兴趣。在x64 Win7上,使用Python 2.6,
len(IP('2001::/64'))
给我
TypeError:\uu len\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。
IP('2001::/64')。
len\uuuuu()
给了你什么?@azhrei overflowerr不是2.7.3中的一个类型错误,而是与
.len\uuuu()
工作正常和
len()。似乎报告了基本问题,它出现在2.6和3.0中。这个bug已经修复了,但我看不出它是在哪里修复的。可能值得尝试Python 3.3吗?@azhrei Python 3.2.3给了我
溢出错误:无法将“int”放入索引大小的整数中
。这可能只是使用
x.len()
的文档说明,而不是
len(x)
.Cool。我会把它放在IPy的文档中。是否值得将其作为一个bug报告?没有理由说长度和索引不能超过这个大小,特别是当我们有像这样的“虚拟”集合时。@lambdafiry我很困惑。作为bug向谁报告?向Python开发人员报告。根据
\uuuu len\uuu
应该返回“一个整数”。非常大的整数仍然是整数。
static PyObject *
builtin_len(PyObject *self, PyObject *v)
{
    Py_ssize_t res;

    res = PyObject_Size(v);
    if (res < 0 && PyErr_Occurred())
        return NULL;
    return PyInt_FromSsize_t(res);
}
IP('2001::/64').len()