我正在用 C 编写一个 Python 模块。我需要报告内置 Python 异常无法描述的错误。因此,我希望抛出我自己类型的异常。问题是,Python 策略是从 BaseException 类派生所有异常。我知道如何创建派生类型对象(分配给 tp_base memeber),但我不知道如何获取对 BaseException 类型对象的引用。PyExc_BaseException 是对 PyObject 的引用,表示一个类,而不是类型对象。
如何从 C 代码中抛出自定义 Python 异常?
我正在用 C 编写一个 Python 模块。我需要报告内置 Python 异常无法描述的错误。因此,我希望抛出我自己类型的异常。问题是,Python 策略是从 BaseException 类派生所有异常。我知道如何创建派生类型对象(分配给 tp_base memeber),但我不知道如何获取对 BaseException 类型对象的引用。PyExc_BaseException 是对 PyObject 的引用,表示一个类,而不是类型对象。
如何从 C 代码中抛出自定义 Python 异常?
在 C 代码中创建新异常类型的最简单方法是调用PyErr_NewException
.
我设法通过使用设置 tp_base(PyTypeObject*)PyExc_BaseException
作为值,这导致我的自定义异常被正确继承自BaseException
.
在CPython 源代码中exceptions.c
有一些很好的提示。