首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Python C-API来确定对象是否有效?

使用Python C-API来确定对象是否有效?
EN

Stack Overflow用户
提问于 2015-02-18 06:17:19
回答 1查看 398关注 0票数 1

摘要:在Python C-API中是否有某种方法来确定PyObject*是否指向有效的Python对象?

上下文:我正在用C代码编写IDL (交互式数据语言)和Python之间的桥梁。当Python对象被包装在IDL对象中时,我做的第一件事就是使用以下C代码递增Python引用计数:

代码语言:javascript
运行
复制
PyObject *pyObj = (PyObject *) id;
Py_INCREF(pyObj);

问题:通常,传入包装函数的整数"id“是由桥代码创建的,因此我可以相信它是一个有效的Python标识符(即它指向一个”真正的“Python对象)。但是,如果用户尝试手动创建其中一个对象,并且只是传入一个随机整数作为Python id,那么Python seg就会在Py_INCREF上出错并使应用程序崩溃。

我想进行一次健全性检查,只是为了验证指针是否确实指向有效的Python对象。我在Python C API中找不到任何可以实际检查给定指针是否确实是有效Python对象的东西。我尝试调用内置的"id“方法,以及垃圾收集器"gc.is_tracked()”,但如果给它们一个错误的指针,它们也会崩溃。

Python C-API中有没有什么东西可以验证PyObject指针是否有效?

EN

回答 1

Stack Overflow用户

发布于 2015-02-19 01:04:23

看起来答案是“否”,没有办法使用Python C API来确定PyObject指针是否有效。使用C指针的常用规则是适用的--要小心,知道你在做什么!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28572181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档