我正在用C编写一个Python类,我想在调试代码中添加断言。assert.h
很适合我。这只会被放入调试编译中,所以断言失败不会影响Python代码*的用户。在
我试图将我的“库”代码分开(它应该与针对Python链接的代码分开),这样我就可以从其他C代码中使用它了。因此,我的Python方法是纯C代码的精简包装器。在
所以我不能在我的“库”代码中这样做:
if (black == white)
{
PyErr_SetString(PyExc_RuntimeError, "Remap failed");
}
纯Python污染了我的C代码。它也比简单的
^{pr2}$我相信Distutils编译器总是设置NDEBUG
,这意味着即使在调试版本中也不能使用assert.h
。在
Mac OS和Linux。在
救命啊!在
*我听过一个反对用从Python调用的C代码进行断言的论点。在
只需使用
assert.h
。distutils总是定义NDEBUG
;它只对Windows上的微软msvc这样做,而且只有在从Python发布版本(而不是从Python调试构建)调用时才会这样做。在要在自己的发布版本中定义NDEBUG,请将
-D
命令行选项传递给设置.py构建扩展Edit:似乎默认情况下,NDEBUG是通过Python的Makefile的OPT设置定义的。要重置此项,请运行
在
setup.py
中取消定义NDEBUG宏:这将产生一个命令行
^{pr2}$它(虽然丑陋)做了正确的事情,也就是说,它使断言保持启用状态。在
为不同的情况创建自己的宏,例如
myassert()
。或者创建一个宏,检查一个全局变量,看看宏是从Python代码还是“normal”C中使用的。Python模块入口点必须将此变量设置为true,或者可以使用函数指针,一个用于Python代码,另一个用于C代码。在相关问题 更多 >
编程相关推荐