C로 파이썬 클래스를 작성 중이며 디버그 코드에 어설 션을 넣을 수 있습니다. assert.h
은 나에게 잘 어울립니다. 이것은 디버그 컴파일에만 적용되기 때문에 파이썬 코드 * 사용자에게 영향을주는 어설 션 오류의 가능성은 없습니다.어떻게 파이썬 C 코드에서 어설 션 할 수 있습니까?
다른 C 코드에서 사용할 수 있도록 내 '라이브러리'코드 (파이썬에 연결된 코드와 분리되어 있어야 함)를 나누려고합니다. 따라서 내 Python 메서드는 내 순수 C 코드 주위에 엷은 래퍼입니다.
그래서 난 내 '라이브러리'코드에서이 작업을 수행 할 수 없습니다
if (black == white)
{
PyErr_SetString(PyExc_RuntimeError, "Remap failed");
}
를이 파이썬 내 순수 C 코드를 오염 때문이다. 또한 나는의 distutils 컴파일러는 항상 내가 디버그 빌드도에서 assert.h
을 사용할 수 없습니다 의미 NDEBUG
을 설정 믿고 간단한
assert(black != white);
보다 훨씬 더 추악한입니다.
Mac OS 및 Linux.
도움말!
파이썬에서 호출 된 C 코드에서 주장한 한 가지 주장이 있습니다.
내가 듣고 싶습니다! 그래서,'python setup.py build' 나'python setup.py build --debug'를 실행하면'gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -g -UDEBUG -I/라이브러리/프레임 워크/Python.framework/버전/2.7/include/python2.7 -c thing.c -o 빌드/temp.macosx-10.6-intel -2.7/thing.o'. NDEBUG를 제거하려면 어떻게해야합니까? – Joe
@ Joe : 알겠습니다. 내 편집을 참조하십시오. –
그건 문제를 해결하지 못합니다. 모든 경우에 어설 션을 사용하려는 경우 모든 사용자에게 사용자 정의 빌드 명령을 사용하도록 알리는 것은 좋은 해결책이 아닙니다.이것은'setup.py'에서 어떻게 든 깨끗한 방법으로 수정되어야합니다. – Albert