如何在C扩展中创建自定义Python异常类型?
我正在用C语言编写一个Python模块。我需要报告一些无法用Python内置异常描述的错误。因此,我想抛出我自己定义的异常。问题是,Python的规定是所有异常都要从BaseException类派生。我知道怎么创建一个派生类型的对象(通过给tp_base成员赋值),但我不知道怎么获取BaseException类型对象的引用。PyExc_BaseException是一个指向PyObject的引用,它表示一个类,而不是一个类型对象。
我该如何从C代码中抛出自定义的Python异常呢?
2 个回答
0
我成功地通过使用 (PyTypeObject*)PyExc_BaseException
来设置 tp_base,这样我的自定义异常就能正确地继承自 BaseException
了。
在 CPython 的源代码 exceptions.c
中有一些很好的提示。
6
在C语言代码中,创建一个新的异常类型最简单的方法就是调用 PyErr_NewException
这个函数。