NoneType类无法构造无

时间:2017-11-14 01:37:18

标签: python python-2.7

出于某些愚蠢的原因,我最近需要构建None

我的第一次尝试是抓住None的课程并使用它。

nt = type(None)

但是,调用nt会出现此错误:

nt()

TypeError: cannot create 'NoneType' instances

这给了我一个轻笑,用以下方式取代了这个尝试:

nt = lambda: None

这让我想到为什么这不起作用。我知道解释器只有一个None,但对于其他几个python对象也是如此,它们的构造函数不会这样。

SO question讨论了None及其类型的遗产,但据我所知,这并不能解释为什么type(None)()会导致TypeError {1}}。

我认为它必须与元类中__new__的返回值发生的某些错误检查有关,但我不确定。

编辑:不是Value of Py_None的重复

该问题要求" CPython中Py_None对象的c级值是多少?"

这个问题具体是关于"为什么type(None)()会产生运行时错误(TypeError)"。 type(None)为我们NoneType提供了type的实例。调用它会导致TypeError,这很奇怪。正如@metatoaster指出的那样,这种行为特定于2.x.在3.x NoneType()中将生成None。这是我期望的行为,显然核心开发人员也认为这种变化也是如此。

@metatoaster还提供了一个看起来很有前途的来源link。这条线似乎可能产生运行时错误消息' TypeError:无法创建' NoneType'实例&#39 ;.我在cannot create .* instances的cpython repo中对2.7.14标记进行了正则表达式搜索,这一行是唯一的结果。

这是消息的上下文:

static PyObject *
type_call(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
    PyObject *obj;

    if (type->tp_new == NULL) {
        PyErr_Format(PyExc_TypeError,
                     "cannot create '%.100s' instances",
                     type->tp_name);
        return NULL;
    }
...
}

回购邮件中有一些地方将tp_new设置为NULL但其中没有任何地方与NoneType

有任何关系

0 个答案:

没有答案