我怎样才能从Python C代码断言?

Joe*_*Joe 7 c python distutils python-c-api python-c-extension

我正在用C编写一个Python类,我想在我的调试代码中加入断言.assert.h很适合我.这只会被放入调试编译中,因此不会出现影响Python代码*用户的断言失败的可能性.

我试图划分我的'库'代码(它应该与链接到Python的代码分开),所以我可以从其他C代码中使用它.因此,我的Python方法是我的纯C代码的薄包装.

所以我不能在我的'库'代码中执行此操作:

if (black == white)
{
    PyErr_SetString(PyExc_RuntimeError, "Remap failed");
}
Run Code Online (Sandbox Code Playgroud)

因为这会用Python污染我的纯C代码.它也比简单的更丑陋

assert(black != white);
Run Code Online (Sandbox Code Playgroud)

我相信Distutils编译器总是设置NDEBUG,这意味着我assert.h甚至不能在调试版本中使用.

Mac OS和Linux.

救命!

*我听过一个论点反对在Python中调用C代码断言.

Mar*_*wis 8

只是用assert.h.这是一个神话,distutils总是定义NDEBUG; 它只适用于Windows上的Microsoft的msvc,然后才从Python发布版本(而不是Python调试版本)调用.

然后,在您自己的发布版本中定义NDEBUG,将-D命令行选项传递给setup.py build_ext.

编辑:似乎NDEBUG默认是通过Python的Makefile的OPT设置定义的.要重置此功能,请运行

OPT="-g -O3" python setup.py build
Run Code Online (Sandbox Code Playgroud)