【问题标题】:PyArg_Parse returning frame object instead of PyLongObjectPyArg_Parse 返回帧对象而不是 PyLongObject
【发布时间】:2014-12-07 03:50:59
【问题描述】:

我正在使用 C 扩展 API 编写 Python 模块,并尝试将一个长变量从 Python 传递到 C 函数,然后从中获取用于表示该变量的原始 PyLongObject。

我正在使用 PyArg_Parse 函数将变量解析为原始 C 指针。我期望返回的 PyObject 是 PyLongObject 类型,但是每当我检查解析对象的类型名的值时,它总是类型为“框架”吗?我错过了什么?

static PyObject* test(PyObject *self, PyObject *args)
{
    PyObject *num;

    if(!PyArg_Parse(args, "0", &num))
    {
        //ERROR YO
    }

    printf("\n%s\n", num->ob_type->tp_name);

    Py_RETURN_NONE;
}

【问题讨论】:

    标签: python c python-extensions


    【解决方案1】:

    看起来好像您传递了无效的参数格式规范(从未在此处看到 0(零))。结果,您得到一个您不处理的异常,但将“num”中的返回值视为成功的值。最重要的是,您正在使用已弃用的函数来解析参数。

    【讨论】:

    • 啊!谢谢!结果是我将O (object) [PyObject *] 的文档误读为0 而不是O。通过正确处理我的错误而不是懒惰,我意识到了这一点,谢谢!
    猜你喜欢
    • 2012-09-28
    • 1970-01-01
    • 2013-12-29
    • 2020-10-06
    • 2016-11-07
    • 2020-04-11
    • 2015-04-13
    • 2014-11-28
    • 2018-07-05
    相关资源
    最近更新 更多