如何在 C 扩展中创建自定义 Python 异常类型?
我正在用 C 编写一个 Python 模块。我需要报告内置 Python 异常无法描述的错误。因此,我希望抛出我自己类型的异常。问题是,Python 的策略是从 BaseException 类派生所有异常。我知道如何创建派生类型对象(分配给 tp_base memeber),但我不知道如何获取对 BaseException 类型对象的引用。 PyExc_BaseException 是对 PyObject 的引用,代表一个类,而不是类型对象。
如何从 C 代码中抛出自定义 Python 异常?
I'm writing a Python module in C. I need to report errors that can't be described by built-in Python exceptions. I therefore wish to throw exceptions of my own type. The problem is, that Python policy is to derive all exceptions from BaseException class. I know how to create a derived type object (assigning to tp_base memeber), but I don't know how to obtain a reference to BaseException type object. PyExc_BaseException is a reference to PyObject, representing a class, not a type object.
How do I throw custom Python exceptions from C code?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 C 代码中创建新异常类型的最简单方法是调用 <代码>PyErr_NewException。
The easiest way to create a new exception type in C code is to call
PyErr_NewException
.我设法使用
(PyTypeObject*)PyExc_BaseException
作为值来设置 tp_base,这导致我的自定义异常正确地从BaseException
继承。异常中的 CPython 源代码中有一些很好的提示。 c.
I managed to set tp_base by using
(PyTypeObject*)PyExc_BaseException
as the value, which results in my custom exception being properly inherited fromBaseException
.There are some good hints in the CPython source code in
exceptions.c
.