Escribo una clase de Python en C y quiero poner aserciones en mi código de depuración. assert.h
me sienta bien. Esto solo se pone en compilaciones de depuración, por lo que no hay posibilidad de que una falla afirmativa afecte a un usuario del código Python *.¿Cómo puedo afirmar desde el código Python C?
Estoy tratando de dividir mi código de 'biblioteca' (que debe estar separado del código vinculado contra Python) para poder usarlo desde otro código C. Por lo tanto, los métodos de My Python son envoltorios delgados en torno a mi código C puro.
Así que no puedo hacer esto en mi código 'biblioteca':
if (black == white)
{
PyErr_SetString(PyExc_RuntimeError, "Remap failed");
}
porque esto contamina mi código pura-C con Python. Es también mucho más feo que un simple
assert(black != white);
Creo que el compilador Distutils siempre establece NDEBUG
, lo que significa que no puedo usar assert.h
incluso en versiones de depuración.
Mac OS y Linux.
¡Ayuda!
* un argumento que he escuchado contra la afirmación en el código C llamado desde Python.
¡Eso es lo que quiero escuchar! Entonces, cuando ejecuto 'python setup.py build' o' python setup.py build --debug' obtengo algo como: 'gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -g -UDEBUG -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c thing.c -o build/temp.macosx-10.6-intel -2.7/thing.o'. ¿Cómo eliminaría el NDEBUG? – Joe
@Joe: Ya veo; ver mi edición –
Eso realmente no resuelve el problema. No es una buena solución decirle a todos sus usuarios que usen un comando de compilación personalizado si desea habilitar las afirmaciones en todos los casos.Esto debe solucionarse de alguna manera de una manera limpia en 'setup.py'. – Albert