如何在C扩展中创建自定义Python异常类型?

时间:2011-06-20 12:21:49

标签: python c exception python-c-api

我正在用C语言编写一个Python模块。我需要报告内置Python异常无法描述的错误。因此,我希望抛出我自己的类型的例外。问题是,Python策略是从BaseException类派生所有异常。我知道如何创建派生类型对象(分配给tp_base memeber),但我不知道如何获取对BaseException类型对象的引用。 PyExc_BaseException是对PyObject的引用,表示类,而不是类型对象。

如何从C代码中抛出自定义Python异常?

2 个答案:

答案 0 :(得分:5)

在C代码中创建新异常类型的最简单方法是调用PyErr_NewException

答案 1 :(得分:0)

我设法通过使用(PyTypeObject *)PyExc_BaseException 作为值来设置tp_base,这导致我的自定义异常正确地继承自BaseException。

CPython源代码中有一些关于exceptions.c的很好的提示